我有一个具有自我关系的实体模型(父/子)。我的名为Article的实体有一个名为parent的属性。这个父实际上是关系,而ParentID是关系中的字段。在ef 4中我这样做了:
using (var dbContext= new DataBaseModel())
{
ArticleTable newEntity= new ArticleTable();
newEntity.name="childArt";
newEntity.ParentID = 1;
dbContext.ArticleTable.Add(newEntity);
dbContext.SaveChanges();
//after calling save I can do this
var parentName = newEntity.Parent.Name;
}
使用实体框架6,这不再起作用了,我再次从数据库中获取实体以获取相关的父实体。这是因为对延迟加载的更改?我应该做些什么。
答案 0 :(得分:3)
不同之处在于,在EF 4中,实体是由成堆的代码生成的,这些代码负责更改通知和延迟加载。从那时起,带有POCO的DbContext
API已成为标准。
如果你想要与旧的'richhed'实体相同的行为,你必须确保延迟加载可以在许多条件下发生:
virtual
修饰符,因为最后一点(也许是第二点)可能是您唯一需要注意的事项。如果您通过new
创建一个新对象,它只是一个无法进行延迟加载的POCO对象。但是,如果您要创建代理,则会发生延迟加载。幸运的是,有一种简单的方法来创建代理:
ArticleTable newEntity= dbContext.ArticleTables.Create();
DbSet<T>.Create()
创建动态代理 -
如果基础上下文配置为创建代理,并且实体类型符合创建代理的要求。