c# - EF 代码优先 : Include not working on optional relationship

标签 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);

不工作属性的映射(放置在 SubChildNotWorking 的配置中):

this.HasMany(scnw => scnw.Childs).WithOptional(c => c.SubChildNotWorking).HasForeignKey(c => c.MyForeignKey);

在所有包含中,只有 SubChildNotWorking实际上不起作用。当使用调试器检查返回的对象时,我看到了所有属性的代理。打开代理为我提供了所有其他关系的正确数据,并为 SubChildNotWorking 提供了“对象上下文已被处理的异常”。属性(property)。

我能发现的唯一区别是 SubChildNotWorking是一个可为空的 FK(在 DB 上具有可为空的列,在 dbcontext 中具有 WithOptional 配置),而所有其他都是使用 WithRequired 配置的不可为空的 FK。

该数据库也是一个遗留数据库,不是使用 Code First 创建的,也没有遵循其约定,我只是在 DbContext 中进行了映射。其他一切正常。

我想弄清楚预加载是否不适用于可为空的 FK,但我找不到任何相关文档。

这是错误还是预期的行为?但最重要的是,我该如何解决这个问题?

谢谢。

最佳答案

你定义了吗

[DataContract]

在你的类(class)(实体)?如果是这样,请不要忘记用

注释您的 SubChild
[DataMember] 

或者当您对实体执行 GET 调用时,它可能最终加载但未显示。

关于c# - EF 代码优先 : Include not working on optional relationship,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10101895/

相关文章:

c# - 在 WPF RichTextBox 中将特定文本设置为粗体

c# - 如何在不依赖公共(public)数据上下文实例的情况下保持相关实体之间的引用透明性?

java - Spring Boot + Hibernate JPA 延迟获取模式仍然查询实体中的列表

javascript - 在网页加载时禁用加载图像

c# - Silverlight 嵌套自定义控件导致 StackOverflowException

c# - 何时实现 iNotifyPropertyChanged 接口(interface)?

c# - 顺序工作流出现在 "ignore"其子事件

entity-framework - 重新设计 EF 嵌套连接以避免 Azure 上的 MSDTC

c# - 使用 Entity Framework Core 2 Code First 创建 varchar

c# - Entity Framework - 延迟加载或额外的异步/等待查询方法?