Unión externa izquierda con Entity Framework Core

c# entity-framework-core

Pregunta

Estoy intentando realizar una solicitud de combinación externa izquierda con EF7 (7.0.0-rc1-final), vNext RC1 (rc1-final) y SQL Server 2014

Base de datos:

Mascota: Id, Nombre

Usuario: Id, Nombre, #PetId

Éste funciona:

var queryWorks = from u in _context.Users
                 join p in _context.Pets on u.PetId equals p.Id into pp
                 from p in pp.DefaultIfEmpty()
                 select new {
                     UserName = u.Name,
                     Pet = p
                 };

pero este no funciona (Mensaje = "La secuencia no contiene elementos"):

var queryWorks = from u in _context.Users
                 join p in _context.Pets on u.PetId equals p.Id into pp
                 from p in pp.DefaultIfEmpty()
                 select new {
                     UserName = u.Name,
                     Pet = p
                 };

SQL Server Profile 2014 me muestra que la segunda solicitud no se envía a SQL Server. Por qué ?

Respuesta aceptada

Creo que es su p.Name dentro de la proyección de su segunda consulta que no se maneja.

A partir de RC1, EF7 aún no sabe cómo hacer combinaciones externas izquierdas. En resumen, son conscientes de que es muy importante hacerlo bien y están trabajando en ello.

Se informó en el número 3186 en github, y algunos de los desarrolladores lo comentaron.

Me comenté con otro repro un poco como el tuyo.

Comentarios del colaborador "maumar":

El problema es que en Linq (para los objetos) el concepto de LOJ no existe por sí solo.

La solución propuesta es representar la navegación opcional utilizando la combinación SelectMany-GroupJoin-DefaultIfEmpty y luego colapsar este patrón en LOJ en nuestro canal relacional. El problema es que esto crea consultas mucho más complejas (principalmente debido a la introducción de subconsultas) y actualmente se rompe para la mayoría de los casos no triviales. Esos errores deben tratarse antes de que podamos solucionar el problema con la expansión de las propiedades de navegación.

Reconocemos esto como un error de alta prioridad, ya que potencialmente devuelve resultados incorrectos.




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué