EF 解析手动附加后的导航属性

本文关键字:导航 属性 EF | 更新日期: 2023-09-27 18:36:57

我正在使用实体框架。 我已使用以下方法将表示数据库中实体的 POCO 对象附加到我的数据库上下文中:

var entity = new MyEntity() { ID = 1, AnotherItemID = 10 };
context.Set<T>().Attach(entity);

目前为止,一切都好。 我可以访问该集并使用我添加的实体。 它以"未更改"状态添加。 但是,它只是一个 POCO 而不是代理。 因此,当我尝试访问导航属性(例如myEntity.AnotherItem)时,我只会返回一个null。

有谁知道是否有办法让 EF 解析以这种方式附加的 POCO 类的导航属性? 或者一种将 POCO 强制转换为代理类的方法?

谢谢

更新有两种方法可以解决这个问题(当然也可能有其他方法! 一个是下面答案中的显式加载选项。 允许延迟加载工作的另一种方法是在创建要附加的实体时使用 DBSet Create 方法而不是 POCO new 关键字。 有关这方面的更多信息,请点击此处:

EF4.3 代码优先,MVC,在开机自检操作中附加后延迟加载

EF 解析手动附加后的导航属性

您可以使用显式加载:

 //When you want to load a reference navigation property
 context.Entry(entity).Reference(p => p.AnotherItem).Load(); 
 //When you want to load a collection navigation property
 context.Entry(post).Collection(p => p.Items).Load();