gpt4 book ai didi

c# - 在 Entity Framework 中关闭 AutoDetectChangesEnabled 可能存在的风险

转载 作者:太空狗 更新时间:2023-10-29 23:13:13 25 4
gpt4 key购买 nike

为了提高 Entity Framework 应用程序的性能,建议设置 AutoDetectChangesEnabled = false

MSDN 上的以下教程说明:

An alternative to disabling and re-enabling is to leave automatic detection of changes turned off at all times and either call context.ChangeTracker.DetectChanges explicitly or use change tracking proxies diligently. Both of these options are advanced and can easily introduce subtle bugs into your application so use them with care.

https://msdn.microsoft.com/en-us/data/jj556205.aspx

最后一部分是我关心的。

  • 您能否给出使用这种优化方法可能发生的一些最常见的问题?
  • 有哪些好的措施可以防止意外后果?

最佳答案

我对 ChangeTracking 的经验是:如果可能的话,你应该让它保持打开状态。对我来说,ChangeTracking 有两个微妙的问题(对我们来说,ChangeTracking 是全局禁用的)。首先,当添加/删除实体时,您将必须手动设置实体状态,因为通常 ChangeTracking 将实体状态设置为已修改/已添加(无论如何您必须手动设置已删除),这适用于每个实体(也包括导航中的实体)特性)。此外,在许多情况下,您必须手动设置 FK。

其次,在编辑相关实体时,您将不得不调用 ChangeTracking 或手动设置相关实体​​ - 根据我的经验,这非常复杂。这是因为 EF 在其上下文图中保留了相关实体的快照,并检查它的引用完整性,而不是 DbSet 条目中的实际相关条目。

为了进一步引用,我发现了一篇由 EF 开发人员 Arthur Vickers 撰写的关于 ChangeTracking 的有趣文章。

Part 1

Part 2

Part 3 - possibly most interesting to you

Part 4

Part 5

关于c# - 在 Entity Framework 中关闭 AutoDetectChangesEnabled 可能存在的风险,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37595065/

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