C# 实体框架6更新,出现所需的复杂属性验证错误
我已经使用实体框架好几年了,更新过程似乎一直困扰着我。我有一个包含4个项目的VisualStudioMVC解决方案。(Web、模型、SharedContext和Windows服务)Windows服务(WS)负责监视数据库。Web和WS项目都使用SharedContext访问数据库。这就来了 我花了一段时间才明白,要启用lazy,我需要将其添加到我的WS构造函数中C# 实体框架6更新,出现所需的复杂属性验证错误,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,我已经使用实体框架好几年了,更新过程似乎一直困扰着我。我有一个包含4个项目的VisualStudioMVC解决方案。(Web、模型、SharedContext和Windows服务)Windows服务(WS)负责监视数据库。Web和WS项目都使用SharedContext访问数据库。这就来了 我花了一段时间才明白,要启用lazy,我需要将其添加到我的WS构造函数中 context = new SharedContext(); context.Configuration.LazyLoadingEna
context = new SharedContext();
context.Configuration.LazyLoadingEnabled = true;
context.Configuration.ProxyCreationEnabled = true;
接下来,我通过这样做检索我的请求
var requests = context.Requests.Where(x => x.Status == FAFSpeachDB.Models.RequestStatus.approved &&
DateTime.Now >= x.PresentationDate
&& !x.EvaluationEmailSent).ToList();
这给了我一个我正在查看的实体列表
最后,在遍历请求列表时,我尝试更新请求对象并将其保存到DB
request.EvaluationEmailSent = true;
context.SaveChanges();
当我执行此操作时,会收到一个实体验证错误,告诉我需要“邀请”属性。(确实是这样,但因为惰性负载正在工作,我希望SavedChanges调用能够顺利工作。)好吧,现在是真正疯狂的部分。当我按如下所示拨打电话时,它不会出错
int invitationId = request.Invitation.IdModel;
request.EvaluationEmailSent = true;
context.SaveChanges();
我唯一的猜测是,通过添加一行访问邀请属性的代码,它将上下文设置为允许其更新的状态。我做错什么了吗?或者,如果我没有做错什么,为什么只访问属性就可以删除实体验证错误。您将延迟加载设置为
true
,这意味着在实际使用之前不会加载任何内容。因此,Invitation
属性在您尝试访问它之前不会被加载,就像您在示例中所做的那样
尝试向原始查询中添加。包括(“邀请”)
(或复数“邀请”),如下所示:
var requests = context.Requests.Include("Invitation")
.Where(x => x.Status == FAFSpeachDB.Models.RequestStatus.approved
&& DateTime.Now >= x.PresentationDate
&& !x.EvaluationEmailSent)
.ToList();
您可以向我们展示您的模型吗?
Invitation
是复杂属性还是其他实体的导航属性?EvaluationEmailSent
只是一个平面属性,即它不会对其setter产生副作用?此外,默认情况下,LazyLoadingEnabled
和ProxyCreationEnabled
都是true
。效果非常好。谢谢