我正在开发使用实体框架(.NET 3.5)的WPF应用程序。它在整个地方访问实体。我担心贯穿整个应用程序的一致性。我是否应该在不同的视图中实例化单独的上下文,还是应该(并且是一个很好的方法)实例化一个可以在全局范围内访问的上下文?例如,我的实体模型包含三个部分:货件(包含子包和其他子内容),公司/联系人(包含子地址和电话)以及磁盘规格。 Shipments和EditShipment视图访问DiskSpecs,而OptionsView管理DiskSpecs(创建,编辑,删除)。如果我编辑一个DiskSpec,我必须在ShipmentsView中有一些东西来检索最新的规格,如果我有单独的上下文吗?WPF应用程序中的全局实体框架上下文
如果可以安全地从应用程序的其余部分获取一个总体上下文,那么我想这就是要走的路。如果是这样,该实例将放在哪里?我使用VB.NET,但我可以从C#翻译很好。任何帮助,将不胜感激。
我只是不希望其中的一个应用程序,用户不得不在应用程序的不同部分重新加载十几次以获取新数据。
更新:
- 所有上下文中使用块,他们不再需要后处理掉的创建:
行,所以如下我已经改变了我的应用程序。
- 加载时,所有实体在处理前都从上下文中分离出来。
- MainViewModel(ContextUpdated)中的新属性引发了所有其他ViewModel预订的事件,该事件运行ViewModels RefreshEntities方法。
- 执行此操作后,我开始出现错误,指出某个实体一次只能由一个ChangeTracker引用。由于我无法弄清楚哪个上下文仍在引用该实体(不应该是任何上下文?),我将该对象作为IEntityWithChangeTracker转换,并将SetChangeTracker设置为空(Null)。
这让当前的问题: 当我null值,实体的changeTracker,然后将其连接到一个背景下,它失去了它的状态发生了改变,并没有更新到数据库中。但是,如果我不更改更改跟踪器,我无法附加。我有我自己的更改跟踪代码,所以这不是问题。
我的新问题是,你应该如何做到这一点。一个很好的示例实体查询和实体保存代码会被剪掉很长一段时间,因为我试图获得我曾经认为是一个简单的事务才能工作。
如果你downvote,我很乐意解释。至少它会让我知道什么不该在路上进一步做。 – CodeWarrior 2012-12-03 19:20:10