【问题标题】:Change Tracking Discrepancy with DbContext and EF Code First使用 DbContext 和 EF Code First 更改跟踪差异
【发布时间】:2012-06-18 21:20:20
【问题描述】:

在使用 EF Code First 时,有两个用于更改跟踪的选项:

  1. 基于快照的更改跟踪
  2. 使用代理进行基于通知的更改跟踪

在使用每种更改跟踪方法运行时,请考虑以下代码。假设一个具有默认配置选项的 DbContext 实例。

var o = context.MySet.First();
o.MyProperty = 42;
context.SaveChanges();

如果第一行上下文加载和跟踪的实体实例的“MyProperty”值已经是 42,那么在第三行调用“SaveChanges”期间,它在更改跟踪器中的状态是不同的。

  1. 基于快照的更改跟踪 - 其状态为“未更改”。
  2. 使用代理进行基于通知的更改跟踪 - 其状态为“已修改”。

鉴于在基于通知的更改跟踪下,在调用“SaveChanges”期间将向数据库发送不必要的更新语句,我设想大多数开发人员更喜欢基于快照的更改跟踪行为。

这种行为差异是故意的吗?

当使用基于通知的更改跟踪和代理时,有没有办法实现与基于快照的更改跟踪相同的行为?

请注意,我认为这与此功能建议有关 - http://data.uservoice.com/forums/72025-entity-framework-feature-suggestions/suggestions/1015363-better-change-tracking-for-poco-proxies

【问题讨论】:

    标签: entity-framework


    【解决方案1】:

    这种行为是intentional。原因是与旧的基于EntityObject 的实体的向后行为兼容性,这些实体的行为方式相同——它们将更改属性视为与实际修改相同的值。链接的文章还显示,新建议是仅在快照更改跟踪存在性能问题时才使用快照更改跟踪并选择更改跟踪代理。

    【讨论】:

      猜你喜欢
      • 2011-08-27
      • 1970-01-01
      • 1970-01-01
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      • 2016-06-10
      • 1970-01-01
      相关资源
      最近更新 更多