es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.
Tags:  

Answer

  1. Avatar for 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:

    await _database.Table1
        .Include(t1 => t1.Table2)
        .Select(t1 => new {
            Table1 = t1,
            SingleTable2 = t1.Table2.FirstOrDefault(t2 => t2.Id == t1.SingleTable2Id)
        })
        .FirstOrDefaultAsync();
    

    Este código utiliza el método Select para proyectar la entidad Table1 junto con una entidad relacionada única Table2, basada en la clave externa SingleTable2Id. El tipo anónimo resultante contiene ambas entidades y se puede recuperar utilizando FirstOrDefaultAsync.

    Ten en cuenta que el método Include todavía se utiliza para incluir todas las entidades relacionadas Table2, pero el método FirstOrDefault 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.

Comments are closed.