我在我的代码中需要加载所有相关实体(都是 - > 1 FK和 - > N FK)的特定查询,因为上下文将在。EF代码优先:包括不工作的可选关系
我做了一个通用的“查询”方法,需要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
属性提供了“对象上下文已处理异常”。
我能够发现的唯一区别是SubChildNotWorking
是一个可为空的FK(在DB上有可空列和在dbcontext中有可选配置),而所有其他的都是使用WithRequired配置的不可空FK。
该数据库也是一个遗留的数据库,不是用Code First创建的,也没有遵循它的约定,我只是在DbContext中做了映射。其他一切正常。
我想弄清楚,如果急于加载不能在可空的FK上工作,但我找不到任何有关该文件的文档。
这是一个错误,还是打算的行为?但最重要的是,我该如何解决这个问题?
谢谢。
如果你只包括没有其他subchildren了'SubChildNotWorking'会发生什么?那它有用吗? – Slauma 2012-04-11 11:38:18
不是。也不起作用。 – 2012-04-11 11:53:20
您可以检查SQL查看是否正确(使用'var sql = facade.Query(c => c.Childs.Select(x => x.SubChildNotWorking))。ToString();')并手动测试查询SSMS是否返回预期的结果行。 –
Slauma
2012-04-11 12:05:24