gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:59:15 26 4
gpt4 key购买 nike

在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com