我正在使用实体框架。我使用以下命令将表示DB中实体的POCO对象附加到我的dbcontext:
var entity = new MyEntity() { ID = 1, AnotherItemID = 10 };
context.Set<T>().Attach(entity);
到目前为止一切顺利。我可以访问该集并使用我添加的实体。它是在Unchanged状态下添加的。但是,它只是一个POCO而不是代理。因此,当我尝试访问导航属性时,例如myEntity.AnotherItem,我只是得到一个null。
有没有人知道是否有办法让EF解决以这种方式附加的POCO类的导航属性?或者将POCO转换为代理类的方法?
由于
更新 有两种方法可以解决这个问题(当然也可能有其他方法!)。一个是下面答案中的Explicit Loading选项。另一种允许延迟加载工作的方法是在创建要附加的实体时使用DBSet Create方法而不是POCO new关键字。关于这里的更多信息:
EF4.3 Code-First, MVC, Lazy Loading After Attaching in POST Action
答案 0 :(得分:4)
您可以使用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();