0

我首先使用没有代码的 EF 4.0,我需要使保存操作异步,问题是 ObjectContext 不是线程安全的,而且我的上下文有很多对象绑定到 WPF UI,我正在考虑克隆的更改我的实体进入另一个上下文并将该上下文安全地保存在另一个线程中,

有没有简单的方法来克隆更改?我知道关键字是 ObjectStateManager,但我该怎么做呢?

4

1 回答 1

1

我很确定这是不可能的。ObjectStateManager是跟踪和存储变化的核心和灵魂,并且与ObjectContext上下文密切相关。移植一个只需要手术。从技术上讲,如果不应用大量反射,您将无法克隆一个,因为它的大部分状态都是在内部管理的。然后,ObjectContext.ObjectStateManager没有二传手。

您的问题的根源是每个视图都有一个上下文(至少,甚至可能是一个全局上下文?)。每个视图的上下文是富客户端应用程序的可行选项,但需要异步处理会更改参数。较长的上下文生命周期不再是一种选择。

一种解决方案可能是将(断开连接的)视图模型绑定到 UI,而不是实体对象,并在单独的线程(嗯,Task)中实例化上下文以保存更改。

EF 6(现在处于 alpha 版本)中的另一个新功能可能会让您感兴趣:内置 async。我还没有尝试过它,但它看起来很有希望。

于 2013-04-09T23:02:30.620 回答