Hola usuario de nuestra página, encontramos la respuesta a lo que necesitas, desplázate y la verás más abajo.
Solución:
Lo más sencillo es usar FirstOrDefaultAsync
o SingleOrDefaultAsync
en lugar de:
model.Item = await db.Items.Include(i => i.ItemVerifications)
.FirstOrDefaultAsync(i => i.Id == id.Value);
La razón por la que está recibiendo el error es porque Find
/ FindAsync
se definen métodos para DbSet
, pero el resultado de Include
es IQueryable
.
Otra forma es combinar FindAsync
con carga explícita:
model.Item = await db.Items.FindAsync(id);
if (model.Item == null)
return HttpNotFound();
await db.Entry(model.Item).Collection(i => i.ItemVerifications).LoadAsync();
Si está utilizando un repositorio genérico y no conoce el PK en tiempo de ejecución, este enfoque puede ayudar:
public interface IGenericRepository where TEntity : class
Task Get(int id, string[] paths = null);
public class GenericRepository : IGenericRepository where TEntity : class
private readonly ApplicationDbContext _context;
private readonly DbSet _dbSet;
public GenericRepository(ApplicationDbContext context)
_context = context;
_dbSet = _context.Set();
public async Task Get(int id, string[] paths = null)
var model = await _dbSet.FindAsync(id);
foreach (var path in paths)
_context.Entry(model).Reference(path).Load();
return model;
Cuando programe utilizando principios sólidos y diseño de dominio, utilice genéricos. El patrón Repository usa una clase genérica. Paso un lambda express a la función GetObjectsQueryable. He configurado la carga diferida para que esté activada, usando las primeras barras de control del código. Sin embargo, me estoy alejando de la carga diferida e implementando una arquitectura de microservicio. La tabla de inclusión es una string y puede usar la función nameof (xxclass) para garantizar el nombre correcto. La función devuelve y los resultados de IQueryable. Los métodos de la clase del repositorio pueden ser utilizados por su mejora de la clase derivada, el método está protegido. Esta es una demostración de dotnet.core.
public class Repository
where T : class
public IQueryable GetObjectsQueryable(Expression> predicate, string includeTable="")
IQueryable result = _dbContext.Set().Where(predicate);
if (includeTable != "")
result = result.Include(includeTable);
return result;
Si para ti ha sido de ayuda este post, agradeceríamos que lo compartas con más desarrolladores de este modo nos ayudas a extender nuestra información.