Tengo una consulta específica en mi código que necesita la carga ansiosa todas las entidades relacionadas (ambos -> 1 FKs y -> N FKs) porque el contexto estará dispuesto justo después de eso .Código EF Primera: no incluyen el trabajo en relación opcional
hice un método genérico "consulta" que se lleva a params Expression<Func<MyItem, object>>[] includes
y luego les internamente cadenas. Esa parte funciona bien.
La consulta se parece a esto:
var item = facade.Query<MyItem>(
c => c.Childs.Select(x => x.Parent),
c => c.Childs.Select(x => x.SubChild1),
c => c.Childs.Select(x => x.SubChildNotWorking),
c => c.Childs.Select(x => x.SubChild2),
c => c.Childs.Select(x => x.SubChild3),
c => c.Childs.Select(x => x.SubChildrens)
).FirstOrDefault(c => c.Name == name);
El mapeo de la propiedad que no trabaja (que se encuentra en la configuración de SubChildNotWorking):
this.HasMany(scnw => scnw.Childs).WithOptional(c => c.SubChildNotWorking).HasForeignKey(c => c.MyForeignKey);
De todos los incluye, sólo el SubChildNotWorking
doesn' en realidad funciona Al inspeccionar con el depurador el objeto devuelto, veo los proxies en todas las propiedades. Abrir los proxies me da los datos correctos para todas las demás relaciones, y un "El objetocontexto ya ha sido eliminado" para la propiedad SubChildNotWorking
.
La única diferencia que era capaz de detectar es que el SubChildNotWorking
es una FK anulable (con columna anulable de la configuración DB y WithOptional en el dbcontext), mientras que todos los demás son FKs no anulables configurados con WithRequired.
La base de datos también es un legado DB no se ha creado con el Código de Primera y no siguiendo sus convenciones, acabo de hacer las asignaciones en el DbContext. Todo lo demás funciona bien
estoy tratando de averiguar si la carga ansiosa no funciona en FKs anulables pero no pude encontrar ninguna documentación al respecto.
¿Eso es un error o un comportamiento intencionado? Pero, sobre todo, ¿cómo resuelvo esto?
Gracias.
¿Qué pasa si se incluye sólo el 'SubChildNotWorking' sin los otros subchildren? ¿Funciona entonces? – Slauma
No. Tampoco funciona –
Se puede comprobar si el SQL es correcta (con sql var = facade.Query (c => c.Childs.Select (x => x.SubChildNotWorking)) ToString();. ') Y probar la consulta manualmente SSMS si devuelve las filas de resultados esperados. –
Slauma