这是我过去所做的(绝不是“最佳实践”,但它对我有用,所以就这样吧):
使用一种“访客模式”。让您的表单(或演示者,或您使用的任何模式)订阅的课程表明他们希望收到更改通知。然后在你的身上,SaveChanges()
你继续ChangeSet
并通知那些要求它的各方。我通过仅订阅某些类型的更改的表单/演示者对此进行了优化,并将其分批提供给他们。每个表单对这些数据做任何他们想做的事情(从存储中刷新当前实体,检查显示在网格上的实体等)。
此外,我在每条记录DateTime
上都有一个成员(在上次更新这些记录的时间。如果需要,我可以使用计时器进行轮询(我将其用于应用程序间通信,而不是用于当前应用程序内的表单之间的通信)。SaveChanges
DateTime
根据您的需要,对线程进行所有更改可能对您有用。如果您的计算确实需要很长时间(或设置并发检查),您可能需要设置软锁(您可以在应用程序中控制它们、禁用Save
按钮或网格的可编辑性等SaveChanges
),以便用户无法保存正在该线程上修改的记录,但话又说回来,这取决于您的 UI/UX 偏好或要求。
我不直接绑定到DbSet
(如果您使用多个上下文,则更少Local
),我有一个绑定到的集合。“其他地方没有更新的数据”应该通过第1点解决
同样,我并不是说这是“最好的”或“推荐的”方式,但我已经使用过它,而且对我来说,它工作得很好。你的旅费可能会改变。
PS:不是官方的或任何东西,但此链接可能是管理您的生命周期的有趣读物DbContext
(可能与原始问题有点或可能不是): http: //mehdi.me/ambient-dbcontext-in -ef6/(免责声明:我没有使用他的“dbcontextscopes”,只是点这个链接来阅读文本,我不知道他的代码好不好)