asp.net-mvc-3 – DBContext,状态和原始值
我正在使用EF和Code First使用ASP.NET MVC3.
我正在为练习编写一个简单的问题跟踪器.在我的控制器中,我有一个相当标准的代码: [HttpPost] public ActionResult Edit(Issue issue) { if (ModelState.IsValid) { dbContext.Entry(issue).State = EntityState.Modified ..... } } 问题第1部分 问题第2部分 db.Entry(issue).OriginalValues["Accepted"] 这将给我与简单查询已传入Edit …的问题对象相同的价值.它给出了相同的结果 issue.Accepted 我明显遗漏了一些东西,因为文档说 解决方法
上下文仅适用于附加实体.附加意味着上下文了解实体,它可以保留其数据,在某些情况下,它可以提供更改跟踪或延迟加载等高级功能.
默认情况下,上下文实例从数据库加载的所有实体都附加到该实例.对于Web应用程序和其他断开连接的方案,您为每个已处理的HTTP请求都有一个新的上下文实例(如果不这样做,则表示您犯了一个大错误).此外,您在HTTP POST中由模型绑定器创建的实体也不会被该上下文加载 – 它已被分离.如果要保留该实体,则必须附加该实体并通知上下文您所做的更改.将状态设置为Entry to Modified将执行两个操作 – 它将实体附加到上下文并将其全局状态设置为Modified,这意味着在调用SaveChanges时将更新所有标量和复杂属性. 因此,通过将状态设置为已修改,您已将实体附加到上下文,但在调用SaveChanges之前,它不会影响您的数据库. OriginalValues在完全附加的场景中非常有用,在这些场景中,您从数据库加载实体并对该附加实体进行更改.在这种情况下,OriginalValues显示从数据库加载的属性值,而CurrentValues显示应用程序设置的实际值.在您的场景中,上下文不知道原始值.它认为原始值是您附加实体时使用的值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – IIS7,SSL和“由于请求实体太大,因此未显示该页面
- 在asp.net页面中的CSS粘贴页脚
- asp.net – 将Visual Studio本地IIS 7调试虚拟路径设置为/
- asp.net-mvc-3 – 在Asp.net MVC中为optgroup功能使用Helpe
- 是否有必要创建ASP.NET 4.0 SQL会话状态数据库,与现有的ASP
- ASP.NET’Session.Remove(key)’v / s’Session(key)= noth
- asp.net jquery用文本框添加行(克隆行)并动态下拉
- asp.net-mvc – System.Web.Mvc.WebViewPage.Model.get返回
- asp.net-mvc-3 – 如何强制MVC查看错误以使项目编译失败?
- 在asp.net中HttpContext.Current.User和Thread.CurrentPrin
- asp.net – 在SimpleMembership中验证用户
- .Net multipart / form-data form enctype和UTF-
- 这是一个bug?浮动操作被视为整数
- asp.net-mvc-3 – 指定Html.TextBoxFor的大小和最
- 在asp.net中验证
- [译]ASP.NET Core 2.0 路由引擎详解
- asp.net打印错误日志
- asp.net – c#如何获取httpResponse.BinaryWrite
- asp.net – Excel Automation Workbooks.Open失败
- asp.net-mvc – 使用自定义HTML扩展在ASP.NET MV