dan*_*ely 8 entity-framework navigation-properties ef-code-first asp.net-mvc-3 dbcontext
在带有Entity Framework的ASP .NET MVC 3中,我有一个域对象,它具有引用其他对象的导航属性,如下所示:
public class Person
{
public String Name {get;set;}
public Guid CompanyID{get;set;}
[ForeignKey(CompanyID)]
public virtual CompanyType Company{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当我创建Person的实例并尝试将其添加到数据库时,DBContext会保留此实体"Person"的缓存并将其发送到数据库.所以稍后在同一个上下文实例的生命周期中,当我尝试访问此实体时,Company字段始终为null,因为导航属性永远不会更新.
有没有办法用数据库中存在的内容更新导航属性?
延迟加载已打开.
Sla*_*uma 11
如果启用延迟加载并且您想要使用延迟加载加载导航属性,则必须创建新的代理Person,而不是使用它实例化new,如下所示:
using (var context = new MyDbContext())
{
var person = context.People.Create(); // creates a lazy loading proxy
person.CompanyID = 123;
context.People.Add(person);
context.SaveChanges();
var company = person.Company; // lazy loading query happens here
}
Run Code Online (Sandbox Code Playgroud)
没有延迟加载,您可以使用显式加载:
using (var context = new MyDbContext())
{
var person = new Person();
person.CompanyID = 123;
context.People.Add(person);
context.SaveChanges();
context.Entry(person).Reference(p => p.Company).Load(); // explicit loading
var company = person.Company; // no query anymore, Company is already loaded
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5278 次 |
| 最近记录: |