我正在尝试使用Entity Framework 1.0实现两阶段提交的形式。
我希望在高层实现的目标是:
到目前为止我遇到的问题是缓存IQueryable有点无意义,因为无论如何它都会回到数据库。所以另一个选择是使用IEnumberable来存储查询的结果,但这会阻止我继承一个查询并将其细化到另一个查询中(但我可以忍受它)。另一个问题是,只要EntityContext到期(我已设法在当前的httprequest中保留),就可以跟踪它。
过去有没有人试图做过与此类似的事情或有任何指示?
非常感谢, 马特
jumpingmattflash.co.uk
答案 0 :(得分:1)
IQueryable只是一个可查询对象而不是实际数据。
您需要运行ToList才能获取数据。
如果您可以保持Context打开并使用transactionscope,您可以执行您要执行的操作。但在大多数情况下,这是不可能的。这也会锁定导致其他问题的数据库。
更好的方法是:
答案 1 :(得分:0)
在数据库的.ToList()
结果上调用IQueryable
。然后使用.AsQueryable()
开始改进其他查询。这应该可以解决你的第一个问题。
至于你的第二个问题,我也在寻找解决方案。据我所知,实体框架关系的底层实现围绕ObjectStateManager
程序集的System.Data.Objects
命名空间中的System.Data.Entity
。这反过来使用MetadataWorkspace
命名空间中的System.Data.Metadata.Edm
类来查找关系映射。这些可以在没有底层数据库连接的情况下使用,如果是这样,将提供一些非常常规的工具来更新复杂的对象图。
如果上下文以与各个实体类似的方式进行分离和附加,那将是很好的。看起来实体框架的下一个版本将关注这些特定类型的问题;处理实体和上下文时更自由。