asp.net-mvc-3 – 如何在Entity Framework中更新实体的导航属性
发布时间:2020-12-16 04:37:04 所属栏目:asp.Net 来源:网络整理
导读:在带有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{
在带有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; } } 当我创建Person的实例并尝试将其添加到数据库时,DBContext会保留此实体“Person”的缓存并将其发送到数据库.因此,稍后在同一上下文实例的生命周期中,当我尝试访问此实体时,Company字段始终为null,因为导航属性永远不会更新. 有没有办法用数据库中存在的内容更新导航属性? 延迟加载已打开. 解决方法
如果启用延迟加载并且您想要使用延迟加载加载导航属性,则必须创建新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 } 没有延迟加载,您可以使用显式加载: 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 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- ABP官方文档(四十)【ASP.NET Core】
- asp.net-mvc – 如何在Html.RenderAction(MVC3)中
- ASP.NET Core使用NLog记录日志
- asp.net core系列 49 Identity 授权(上)
- asp.net-mvc-3 – Mvc 3图像上传库
- asp.net-mvc – MVC4 RC WebApi参数绑定
- asp.net-mvc – 从ASP.NET MVC操作返回什么来允许
- asp.net-mvc – 当使用AutoMapper / AutoMapView
- asp.net:runat =“server”和服务器控件之间的区
- asp.net-mvc – ASP.NET MVC 5(Visual Studio 20
热点阅读