【问题标题】:Entity Framework v1 and Cached POCO update实体框架 v1 和缓存 POCO 更新
【发布时间】:2011-05-06 08:34:04
【问题描述】:

我在我的 .NET 3.5 应用程序中使用 EF v1 和 Velocity 缓存。我的缓存对象是数据库中实体模型的表示。所以我决定将 EF v1 与 POCO 适配器一起使用。所以有一个实体访问层从缓存中读取对象,如果不存在,则从数据库中读取它并立即缓存它。现在在需要更新的用例中,需要在数据库中更新脏 POCO。现在我不能在这里直接使用 POCO 适配器和代理,因为它们需要一个跟踪更改的支持对象。我从未从框架中对适配器对象进行水合,因此不会发生更改检测。我看到的最简单的选择是:

  1. 在更新前读取实体。从 POCO 设置适配器值。让变更检测顺其自然。这会在每次更新之前进行选择,这可能会导致许多关联实体的成本很高。
  2. 创建一个新的实体对象。从 POCO 设置实体键和属性。保存更改。即使没有更改属性/关联实体,这也会进行不必要的写入。

我希望我在问题陈述中很清楚。请提出建议。

【问题讨论】:

    标签: .net entity-framework appfabric efpocoadapter


    【解决方案1】:

    其实 1. 和 2. 是一样的。您需要完全读取实体(连同关联),以确保将分离对象中的更改转换为实体上下文。这种方法的注意事项是: 1.更新前阅读 2. 过时的写入(由于分离对象的所有属性都已更新,我们最终可能会更新一个过时的值,因为我们并没有真正改变什么)

    我认为没有任何方法可以避免 1. 但是如果 2. 对您的业务需求至关重要(这意味着您不能用过时的值覆盖,请跟踪您正在通过“IsChangedProperty”更改的字段并仅更新那些这很痛苦,但不幸的是,EF v4 和 v1 都没有给你任何喘息的机会:(

    【讨论】:

      猜你喜欢
      • 2012-03-22
      • 1970-01-01
      • 2012-03-08
      • 1970-01-01
      • 2011-08-11
      • 2012-04-13
      • 1970-01-01
      • 2011-08-21
      • 1970-01-01
      相关资源
      最近更新 更多