none
Clase generica T con dbset que retorne todos los datos de una entidad RRS feed

  • Pregunta

  • Buenas tardes 

    Tengo una clase genérica T y estoy utilizando un _dbSet para recuperar los datos y crear, modificar  y eliminar de la db.

    Tengo esta función que me retorna todos los datos de una entidad

    public virtual IEnumerable<T> FindAll()
            {
                return _dbSet;
            }
    


    Pero cuando asigno un gridview al origen de datos me sale este error

    ----

    Data binding directly to a store query (DbSet, DbQuery, DbSqlQuery) is not supported. Instead populate a DbSet with data, for example by calling Load on the DbSet, and then bind to local data. For WPF bind to DbSet.Local. For WinForms bind to DbSet.Local.ToBindingList().

    ----

    El hecho es que cuando recorro los datos del dbset para formar la lista, esta si tiene datos

    //using (var db = new OriginalContext())
                    //{
                        //IList<CategoriaDTO> TCategorias = new List<CategoriaDTO>();
                        //var result = base.FindAll();
                        //foreach (var item in result)
                        //{
                        //    CategoriaDTO categoria = new CategoriaDTO
                        //    {
                        //        IdCategoria = item.IdCategoria,
                        //        Nombre = item.Nombre
                        //    };
                        //    TCategorias.Add(categoria);
                        //}
                        //return TCategorias;
                        var result = base.FindAll();
                        return result;
                    //}
    


    Como pueden ver esta comentado, pero me tocaría recorrer todos los datos del dbset para que me lo entienda el datagrid.

    Hay alguna manera de retornar el dbset con algún método extendido¿?¿?

     

    Muchas gracias por su ayuda

     

    CCMMASI

    jueves, 22 de diciembre de 2011 17:15

Respuestas

  • Es una libreria de clases para un proyecto asp.net y ya lo pude resolver:

    var result = from c in base.FindAll()
                                 select new
                                     {
                                         c.IdCliente,
                                         c.Nombre,
                                         NombreEnum = Enum.GetName(typeof(ClienteDTO.TipoCliente), c.tipoCliente),
                                         c.tipoCliente,
                                         c.Direccion,
                                         c.Telefono,
                                     };
    

    Realizo esta consulta con LINQ con los datos que deseo mostrar y con eso pude resolver el problema

    Muchas gracias

     

    • Marcado como respuesta ccmmasi viernes, 23 de diciembre de 2011 12:31
    viernes, 23 de diciembre de 2011 12:17

Todas las respuestas

  • Buenas!
    Fíjate en el mensaje de error:

    Data binding directly to a store query (DbSet, DbQuery, DbSqlQuery) is not supported. Instead populate a DbSet with data, for example by calling Load on the DbSet, and then bind to local data. For WPF bind to DbSet.Local. For WinForms bind to DbSet.Local.ToBindingList().

    Que usas WPF o Winforms?

    Si usas WinForms no devuelvas _dbSet, devuelve _dbSet.Local.ToBindingList() y listos. Si usas WPF devuelve simplemente _dbSet.Local.

    Saludos!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis
    viernes, 23 de diciembre de 2011 8:07
  • Es una libreria de clases para un proyecto asp.net y ya lo pude resolver:

    var result = from c in base.FindAll()
                                 select new
                                     {
                                         c.IdCliente,
                                         c.Nombre,
                                         NombreEnum = Enum.GetName(typeof(ClienteDTO.TipoCliente), c.tipoCliente),
                                         c.tipoCliente,
                                         c.Direccion,
                                         c.Telefono,
                                     };
    

    Realizo esta consulta con LINQ con los datos que deseo mostrar y con eso pude resolver el problema

    Muchas gracias

     

    • Marcado como respuesta ccmmasi viernes, 23 de diciembre de 2011 12:31
    viernes, 23 de diciembre de 2011 12:17