将EF ObjectContext的更改克隆到另一个新上下文,以安全地异步保存更改

本文关键字:上下文 安全 保存更改 异步 另一个 ObjectContext EF | 更新日期: 2023-09-27 18:08:11

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

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

将EF ObjectContext的更改克隆到另一个新上下文,以安全地异步保存更改

我很确定这是不可能的。ObjectStateManagerObjectContext跟踪和存储变更的核心和灵魂,与上下文紧密相连。移植一个只需要做一个手术。从技术上讲,如果不应用大量反射,您将无法克隆一个镜像,因为它的大多数状态都是内部管理的。然后,ObjectContext.ObjectStateManager没有setter

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

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

你可能会对EF 6的另一个新特性感兴趣:内置异步。我从来没有尝试过,但它看起来很有前途。