Mat*_*sca 9 c# entity-framework lazy-loading code-first eager-loading
我的代码中有一个特定的查询,需要急切加载所有相关的实体(两个 - > 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);
Run Code Online (Sandbox Code Playgroud)
不工作属性的映射(放置在SubChildNotWorking的配置中):
this.HasMany(scnw => scnw.Childs).WithOptional(c => c.SubChildNotWorking).HasForeignKey(c => c.MyForeignKey);
Run Code Online (Sandbox Code Playgroud)
在所有包含中,只有SubChildNotWorking
实际上不起作用.在使用调试器检查返回的对象时,我会在所有属性上看到代理.打开代理为我提供了所有其他关系的正确数据,并为该SubChildNotWorking
属性提供了"objectcontext已被处置异常" .
我能够发现的唯一区别是,它SubChildNotWorking
是一个可以为空的FK(DB上有可空列和dbcontext中的WithOptional配置),而所有其他都是使用WithRequired配置的不可空FK.
数据库也是一个没有使用Code First创建的遗留数据库而不遵循其约定,我只是在DbContext中进行了映射.其他一切都很好.
我试图找出是否急于加载对可空的FK不起作用,但我找不到任何关于它的文档.
这是一个错误,还是预期的行为?但最重要的是,我该如何解决这个问题呢?
谢谢.
小智 0
你定义了吗
[DataContract]
Run Code Online (Sandbox Code Playgroud)
在你的班级(实体)上?如果是这样,请不要忘记用以下方式注释您的 SubChild
[DataMember]
Run Code Online (Sandbox Code Playgroud)
或者,当您对实体执行 GET 调用时,它可能最终会加载但不会显示。