0

我正在尝试使用 Entity Framework 1.0 实现一种两阶段提交的形式。

我想在高水平上实现的是:

  1. 从数据库中获取所有数据并将其存储在缓存中。
  2. 修改单个实体
  3. 将所有更改提交到数据库

到目前为止我遇到的问题是缓存 IQueryable 有点毫无意义,因为无论如何它都会返回数据库。因此,另一种选择是使用 IEnumberable 来存储查询的结果,但这会阻止我继承一个查询并将其细化为另一个查询(但是我可以接受)。另一个问题是,只要 EntityContext 过期(我已经设法在当前的 httprequest 中保留)就是这样,就无法跟踪任何更改。

过去有没有人试图做类似的事情或得到任何指示?

非常感谢,马特

jumpingmattflash.co.uk

4

2 回答 2

1

IQueryable 只是一个可查询对象而不是实际数据。

您需要运行 ToList 以获取数据。

如果您可以保持上下文打开并使用事务范围,您就可以做您想做的事情。然而,在大多数情况下,这是不可能的。这也会锁定导致其他问题的数据库。

更好的方法是:

  • 从数据库中读取数据
  • 处理上下文
  • 客户进行所需的任何更改
  • 打开新的上下文
  • 再次读取数据。
  • 通过将数据从更改的数据复制到第二组来进行更改
  • 提交更改
  • 处理上下文
于 2009-08-05T17:44:50.383 回答
0

从数据库中调用.ToList()您的结果。IQueryable然后开始细化到其他查询中使用.AsQueryable(). 这应该可以解决您的第一个问题。

至于你的第二个问题,我也在寻找解决方案。据我了解,实体框架的关系部分的底层实现围绕程序集ObjectStateManagerSystem.Data.Objects命名空间中的System.Data.Entity。这又使用命名空间中的MetadataWorkspaceSystem.Data.Metadata.Edm来查找关系映射。这些可能可以在没有底层数据库连接的情况下使用,如果是这样,将提供一些非常通用的工具来更新复杂的对象图。

如果上下文以与单个实体类似的方式具有分离和附加功能,那就太好了。看起来实体框架的下一个版本将专注于这些特定类型的问题;处理实体和上下文时更自由。

于 2009-07-24T03:23:12.620 回答