实体框架6的更新没有往返
本文关键字:更新 框架 实体 | 更新日期: 2023-09-27 18:04:58
在EF 4.1中,当我想要更新一条记录时,我可以通过创建一个新实体,设置主键,将其附加到DBContext,然后更新字段来避免首先加载它的往返。更改跟踪将确保只有我在附加实体后更改的字段才会更新。这里解释了这个方法。但现在我在ASP上尝试使用EF 6.1。. NET项目,并发现它不起作用。
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有一堆像实体键这样的东西,而EF 6看起来像一个简单的POCO)。谷歌显示了EF 4和EF 5之间的一些变化,但我没有看到任何关于如何使这个技巧工作的提及。
更新:查看由第二块代码执行的sql,我看到只有Deleted
正在更新,因为它应该…这是创建对象和附加它的问题吗?
在编码时,我设法在正确答案周围绊倒了几次,最后才意识到我问错了问题。在注释的帮助下,我了解了一些涉及变更跟踪的EF 5破坏性变更,这帮助我意识到我需要禁用的是验证。
看看这个问题的解释,但本质上我需要的是
SHEntity.Configuration.ValidateOnSaveEnabled = false;