【发布时间】:2014-11-20 00:26:22
【问题描述】:
我已经使用实体框架几年了,更新过程似乎总是让我感到困惑。我有一个包含 4 个项目的 Visual Studio MVC 解决方案。 (Web、Models、SharedContext 和一个 Windows 服务)Windows 服务 (WS) 负责监控数据库。 Web 和 WS 项目都使用 SharedContext 来访问数据库。就这样吧。
我花了一段时间才发现要启用惰性,我需要将它添加到我的 WS 构造函数中。
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();
这为我提供了我正在查看的实体的列表。
最后,在遍历请求列表时,我尝试更新请求对象并将其保存到数据库中。
request.EvaluationEmailSent = true;
context.SaveChanges();
当我这样做时,我收到一个实体验证错误,告诉我需要“邀请”属性。 (确实如此,但由于延迟加载正在工作,我希望 SavedChanges 调用能够顺利工作。)好的,现在这是真正疯狂的部分。当我如下所示拨打电话时,它可以正常工作。
int invitationId = request.Invitation.IdModel;
request.EvaluationEmailSent = true;
context.SaveChanges();
我唯一的猜测是,通过添加一些访问邀请属性的代码行,它会将上下文设置为允许更新的状态。我在这里做错了吗?或者,如果我没有做错任何事情,为什么只访问该属性会删除实体验证错误。
【问题讨论】:
-
你能告诉我们你的模型吗?
-
Invitation是复杂属性还是不同实体的导航属性? -
EvaluationEmailSent只是一个平面属性,即它不会在其设置器中引起副作用吗?此外,LazyLoadingEnabled和ProxyCreationEnabled默认为true。
标签: c# entity-framework entity-framework-6