none
Entity Framework Core RRS feed

  • Pregunta

  • Hola

    Trabajo con EF Core 3.1 

    Deseo replicar un método que esta hecho en EF6 pasarlo a EFCore 3.1

    EF6

    using (var context = new BusinessContext())
                {
                    DbQuery<T> query = context.Set<T>();
                    includelist.ForEach(x => query = query.Include(x));
                    return query.FirstOrDefault(predicate);
                }

    EFCore 3.1

    using (var context = new CatalogoInquilinoContext())
                {
                    DbSet<T> query = context.Set<T>();
                    includelist.ForEach(x => query = (DbSet<T>)query.Include(x));
                    return await query.FirstOrDefaultAsync(predicate);
                }

    DbSet es lo que me recomendo el intelicence pero a la hora de ejecutar el método me da un error de que no esta bien castiado.

    Saludos!


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú


    lunes, 29 de junio de 2020 16:05

Respuestas

  • Respondiendo a tu pregunta me salia este error:

    System.InvalidCastException: Unable to cast object of type 'Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[TecSoftware.EntidadesDominio.BaseDato]' to type 'Microsoft.EntityFrameworkCore.DbSet`1[TecSoftware.EntidadesDominio.BaseDato]'.
       at TecSoftware.Infrastructure.BaseRepository`1.<>c__DisplayClass5_0.<Single>b__0(String x) in C:\D\TecSoftwareMultitenant\TecSoftwareMultitenant\TecSoftware.Infrastructure\Repositories\BaseRepository.cs:line 96
       at System.Collections.Generic.List`1.ForEach(Action`1 action)

    Ese error salía justo en la línea donde esta el ForEach

    Lo solucione de la siguiente manera

    using (var context = new CatalogoInquilinoContext())
                {
                    IQueryable<T> query = context.Set<T>();
                    includelist.ForEach(x => query = query.Include(x));
                    return await query.FirstOrDefaultAsync(predicate);
                }

    Patrón de repositorio con Entity Framework Core


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú


    lunes, 29 de junio de 2020 17:08

Todas las respuestas

  • hola

    >>pero a la hora de ejecutar el método me da un error de que no esta bien castiado.

    Cual es el mensaje exactamente que puedes leer?

    que pasa si lo dejas igual a como lo tenias en EF6? no veo porque necesitas aplicar ningun caste en el ForEach

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 29 de junio de 2020 17:04
  • Respondiendo a tu pregunta me salia este error:

    System.InvalidCastException: Unable to cast object of type 'Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[TecSoftware.EntidadesDominio.BaseDato]' to type 'Microsoft.EntityFrameworkCore.DbSet`1[TecSoftware.EntidadesDominio.BaseDato]'.
       at TecSoftware.Infrastructure.BaseRepository`1.<>c__DisplayClass5_0.<Single>b__0(String x) in C:\D\TecSoftwareMultitenant\TecSoftwareMultitenant\TecSoftware.Infrastructure\Repositories\BaseRepository.cs:line 96
       at System.Collections.Generic.List`1.ForEach(Action`1 action)

    Ese error salía justo en la línea donde esta el ForEach

    Lo solucione de la siguiente manera

    using (var context = new CatalogoInquilinoContext())
                {
                    IQueryable<T> query = context.Set<T>();
                    includelist.ForEach(x => query = query.Include(x));
                    return await query.FirstOrDefaultAsync(predicate);
                }

    Patrón de repositorio con Entity Framework Core


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú


    lunes, 29 de junio de 2020 17:08
  • Hola Pedro Ávila

    Gracias por confirmar que se ha encontrado una solución a la consulta realizada. Debido a ello, este hilo será cerrado. 

    Si es necesario, por favor abra un nuevo hilo. 

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN. 

     

     Andres Aguilar

    ____________________________ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    lunes, 29 de junio de 2020 19:13
    Moderador
  • entiendo que EF Core depreco el uso de DbQuery, por eso si lo usabas

     var query = context.Set<T>();

    deberia funcionar directo

    aunque bueno quizas necesite indicar

    DbSet<TEntity> Class

    explicitamente ya que tiene varias implementaciones posibles


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    lunes, 29 de junio de 2020 20:01