EF Core 5: Incluyendo solo una entidad de una colección.
¿Cómo se incluye solo una entidad por entidad “principal” en una consulta donde la propiedad de navegación es una colección?
await _database.Table1
.AsQueryable()
.Include(t1 => t1.Table2.Where(t2 => t2.Id == t1.SingleTable2Id))
.FirstOrDefaultAsync();
Lo anterior parece no funcionar. Recibo la siguiente excepción:
No se pudo traducir. Vuelva a escribir la consulta de una forma que se pueda traducir, o cambie a evaluación de cliente explícitamente insertando una llamada a 'AsEnumerable', 'AsAsyncEnumerable', 'ToList' o 'ToListAsync'. Consulte https://go.microsoft.com/fwlink/?linkid=2101038 para obtener más información.
davy.ai
Para incluir solo una entidad principal por entidad de “main” en una consulta en la que la propiedad de navegación es una colección, puedes usar el siguiente código:
Este código utiliza el método
Select
para proyectar la entidadTable1
junto con una entidad relacionada únicaTable2
, basada en la clave externaSingleTable2Id
. El tipo anónimo resultante contiene ambas entidades y se puede recuperar utilizandoFirstOrDefaultAsync
.Ten en cuenta que el método
Include
todavía se utiliza para incluir todas las entidades relacionadasTable2
, pero el métodoFirstOrDefault
se utiliza para seleccionar solo una de ellas según la clave externa. Esto debería evitar el error de traducción mencionado en la pregunta.