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

Kat*_*ate 5 c# entity-framework

我正在使用实体框架。我使用以下命令将代表数据库中实体的POCO对象附加到我的dbcontext中:

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

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

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

谢谢

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

EF4.3代码优先,MVC,在POST操作中附加后的延迟加载

oct*_*ccl 5

您可以使用“ 显式加载”

 //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(); 
Run Code Online (Sandbox Code Playgroud)

  • 嗨@octavioccl 感谢您的快速回复。我试图通过延迟加载来实现解决方案,因此我不必事先考虑太多要显式加载的内容。但也许我在这个场合有点太懒了! (2认同)