如何使用多个表单管理实体框架上下文

时间:2016-01-15 12:40:48

标签: c# wpf entity-framework entity-framework-6

使用多个表单时,我遇到了同步上下文的麻烦。想象一下, ProductsCollectionView 表单包含产品列表(网格), ProductView 表单用于编辑所选产品。

我按照MS指南的建议,通过每个表单上下文来管理EF上下文的生命周期。

我在SO上发现了类似的问题,但没有一个答案实际上提出了解决方案,而是将OP的设计定义为坏,并建议实施 UnitOfWork / Repository模式

首先,我不知道这是如何解决这个特定问题的。更重要的是,这不是多余的,DbContext本身不是UnitOfWork,而DbSet是一个存储库吗?

有人可能会争辩说,通过实施这些模式并使用其他东西更改EF或提供测试数据,您可以从进一步抽象数据访问层中受益。但那不是主题。

回到问题,给定方案,我如何将对ProductView所做的更改反映到ProductCollectionView?

我最好的猜测是实现某种中介并让DbContexts在进行更改时通知它,并从其他上下文中侦听更改,然后根据更改,对本地数据集执行操作。

我已经坚持了好几天了。在我休息时,我甚至看到我的猫试图解决这个问题 - 没有运气。但是,说实话,我不认为它知道如何编码。 :)

指向一个正确的方向是非常有帮助的,提供一些代码示例/文章真的非常非常有帮助:)

由于

P.S。 Model建立了CodeFirst(逆向工程)。

编辑:也许我不清楚。我的目标是在用户在ProductView的底层上下文中调用SaveChanges()之后,通过ProductView更新ProductsCollectionView。不仅限于此方案,可能还有另一个表单已打开,其上下文已加载此产品记录,需要反映对该记录所做的更改。

1 个答案:

答案 0 :(得分:0)

到目前为止,某种调解员/信使服务是最好的,也是我找到的唯一解决方案。如果有人想出其他的话,我会很高兴。

简而言之: 保存更改/添加实体时,发送消息/通知并让ViewModel或Context直接订阅信使并加载/重新加载添加/更改的实体。