c# - 在没有往返的情况下更新 Entity Framework 6

标签 c# asp.net entity-framework

在 EF 4.1 中,当我想要更新记录时,我可以通过创建新实体、设置主键、将其附加到 DBContext,然后更新字段来避免先加载记录的往返过程。更改跟踪将确保只有我在附加实体后更改的字段才会更新。这个方法解释here .但现在我在 ASP.NET 项目上尝试使用 EF 6.1,发现它不起作用。

var court_code = new System_Court();
court_code.UID = UID;
SHEntity.System_Court.Attach(court_code);
court_code.Deleted = true;
SHEntity.SaveChanges();

这在以前是可行的,但现在它给了我一个验证错误,说我缺少各种必填字段——我确实是这样,但它不应该在意,因为 Deleted 是唯一的记录我要更新。但是,如果我通过往返进行,则效果很好。

var court_code = SHEntity.System_Court.Where(w => w.UID == UID).First(); 
court_code.Deleted = true;
SHEntity.SaveChanges();

这是否在 EF 4 和 EF 6 之间发生了变化?我看到 EF 6 生成了与 EF 4 不同的外观实体类(EF 4 有一堆东西,比如 Entity Key,而 EF 6 看起来像一个简单的 POCO)。谷歌搜索显示了 EF 4 和 5 之间的许多变化,但我没有看到任何关于如何使这个技巧现在起作用的提及。

更新: 查看第二个代码块执行的 sql,我看到只有 Deleted 正在更新,这是应该的。那么创建对象并像这样附加它是否存在一些问题?

最佳答案

在编写代码的过程中,我设法找到了正确答案几次,然后才最终意识到我问错了问题。在评论的帮助下,我了解了一些涉及更改跟踪的 EF 5 重大更改,这帮助我意识到我需要禁用验证。

查看 this question以获得解释,但本质上我需要的是

SHEntity.Configuration.ValidateOnSaveEnabled = false;

关于c# - 在没有往返的情况下更新 Entity Framework 6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23862011/

相关文章:

asp.net - Web 服务在 SOAPAction 中添加额外的正斜杠

c# - 对象引用未设置到数据集中对象的实例

jquery - Kendo MVVM 绑定(bind)添加/插入项目,如何?

ASP.NET MVC 应用程序分析

c# - 在 Episerver 中截断 Xhtmlstring

c# - 如何删除 Outlook 插件

c# - WinRT 应用程序通过按 Enter 键登录并显示 MVVM 指示灯

c# - 为 Windows Mobile 编译时找不到引用的程序集

asp.net-mvc - MVC-Viewmodel 和 LINQ,将值插入表中,该值被另外两个表中的另外两个值标记

c# - Try catch 在 Azure 服务器中不起作用