我的代码中有一个特定查询,它需要急切加载所有相关实体(->1 FK 和 ->N FK),因为在此之后将立即处理上下文。
我做了一个通用的“查询”方法,params Expression<Func<MyItem, object>>[] includes
然后在内部链接它们。那部分工作正常。
查询如下所示:
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);
not working 属性的映射(放置在 SubChildNotWorking 的配置中):
this.HasMany(scnw => scnw.Childs).WithOptional(c => c.SubChildNotWorking).HasForeignKey(c => c.MyForeignKey);
在所有包含中,只有SubChildNotWorking
实际不起作用。当使用调试器检查返回的对象时,我看到了所有属性的代理。打开代理为我提供了所有其他关系的正确数据,以及该属性的“对象上下文已被处理异常” SubChildNotWorking
。
我能够发现的唯一区别是它SubChildNotWorking
是一个可为空的 FK(在 DB 上具有可为空的列,在 dbcontext 中具有 WithOptional 配置),而所有其他的都是配置有 WithRequired 的不可为空的 FK。
该数据库也是一个遗留数据库,不是使用 Code First 创建的,也没有遵循其约定,我只是在 DbContext 中进行了映射。其他一切正常。
我试图弄清楚急切加载是否不适用于可为空的 FK,但我找不到任何有关此的文档。
这是一个错误,还是预期的行为?但最重要的是,我该如何解决这个问题?
谢谢。