实体框架v1和缓存POCO更新

时间:2011-05-06 08:34:04

标签: .net entity-framework appfabric efpocoadapter

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

  1. 更新前阅读实体。从POCO设置适配器值。让变化检测顺其自然。这在每次更新之前进行选择,这对于许多相关实体而言可能是昂贵的。
  2. 创建一个新的Entity对象。从POCO设置实体键和属性。保存更改。即使未更改属性/关联实体,这也会执行不必​​要的写入操作。
  3. 我希望我在问题陈述中很清楚。请建议。

1 个答案:

答案 0 :(得分:0)

实际上结果是1.和2.是相同的。您需要完全读取实体(以及关联)以确保将分离对象中的更改转换为实体上下文。这种方法的警告是: 1.更新前阅读 2.陈旧写道(因为分离对象的所有属性都得到更新,我们最终可能会更新staler值,因为我们没有真正改变的东西)

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