在没有往返的情况下更新实体框架6

时间:2014-05-26 02:43:33

标签: 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正在更新,因为它应该..这是创建对象并将其附加的问题吗?

1 个答案:

答案 0 :(得分:2)

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

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

SHEntity.Configuration.ValidateOnSaveEnabled = false;