【问题标题】:Is there any way to control AutoDetectChanges on SqlEntityConnection?有什么方法可以控制 SqlEntityConnection 上的 AutoDetectChanges?
【发布时间】:2013-01-03 07:33:15
【问题描述】:

This article 提供了一些证据,表明在您的 Entity Framework 数据上下文中关闭 AutoDetectChanges 可以在插入大量实体时显着提高性能。

context.Configuration.AutoDetectChangesEnabled = false;

但是,SqlEntityConnection type provider 提供的 DataContext 似乎没有提供任何控制此设置的方法。

没有context.Configuration 属性或context.DataContext.Configuration 属性。有一个context.DataContext.ContextOptions,但它甚至没有类似于AutoDetectChangesEnabled

类型提供者上下文中的DataContext 属性是System.Data.Objects.ObjectContext 类型。有谁知道从那里影响这个特定设置的方法?

【问题讨论】:

    标签: entity-framework f# type-providers


    【解决方案1】:

    我去年写了一篇关于检测更改性能的非常相似的文章,您可以在这里找到:http://blog.staticvoid.co.nz/2012/5/7/entityframework_performance_and_autodetectchanges我的经验主要是 DbContext(它包装了 ObjectContext),但我做了一些搜索,发现了以下内容

    Why is inserting entities in EF 4.1 so slow compared to ObjectContext?

    这说明 ObjectContext 实际上并没有进行自动更改检测,所以这不是您应该担心的事情。但是您仍然需要注意,大型对象图会减慢速度,因为所有快照跟踪方案都需要在某些时候检测到更改,这涉及到对象图的完整枚举

    【讨论】:

    • 感谢您提供有关 ObjectContext 的默认行为的信息。很有可能,Type Provider 不会对默认行为添加任何额外的更改检测,我不需要担心这一点。当然,唯一可以确定的方法是将类型提供程序与带有和不带有 AutoDetectChanges 的原始 ObjectContext 和/或 DbContext 进行基准测试。如果我有机会这样做,我会更新我的问题。
    • @JoelMueller 是的,绝对是的,如果你这样做,我真的很想看到结果。我做了一个基准测试器,用于我的博客文章,如果你想要一些预先烘焙的测试,它在 github 上。我为该特定博客文章使用了插入/更新方案。如果你最终使用了基准测试 fork 它,我会将你的新测试拉入主干
    • 我使用您的基准测试器进行了一些比较,对于批量插入,类型提供程序与 DbContext 相当或更好,但在每种情况下都关闭了 AutoDetectChanges。所以问题解决了 - 不需要我正在寻找的那个设置。
    • @JoelMueller 非常感谢您的更新和额外的测试很快就会将它们拉入后备箱
    猜你喜欢
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 2015-04-20
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    相关资源
    最近更新 更多