2016-03-01 85 views
2

我正在使用实体框架。我已经把它贴表示数据库实体到我的DbContext使用POCO对象:手动附加后EF解析导航属性

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 Code-First, MVC, Lazy Loading After Attaching in POST Action

回答

2

您可以使用Explicity Loading

//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(); 
+1

嗨@octavioccl感谢您的快速回复。我试图通过延迟加载实现解决方案,所以我不必事先考虑要明确加载的内容。但也许我在这个时候太懒惰了! – Kate

+0

问题,您的导航属性是否为“虚拟”,因为这是延迟加载的要求。在附加之后,您应该可以延迟加载您的相关实体。 – octavioccl

+0

是的,他们是虚拟的。如果我实际从数据库中检索实体,它们会执行延迟加载。那么即使手动创建和附加实体,他们是否应该自动加载?也许我没有正确地附加它? – Kate