我在当前项目中使用 WPF、MVVM 和实体框架。
为简单起见,假设我有一个针对材料列表(实木)进行 CRUD 操作的视图模型。
我的 ViewModel 的 EF 上下文 ( WTContext ) 是通过属性注入初始化的,例如:
SolidWoods_VM newView = new SolidWoods_VM();
newView.Context = new WTContext(SettingsManager.Instance.GetConnectionString());
这样我就可以测试这个 ViewModel:
SolidWoods_VM swVM = new SolidWoods_VM();
swVM.Context = new FakeWTContext();
想象一下,在插入操作期间出现问题并且 WTContext.SaveChanges() 失败。刷新 ViewModels 上下文的最佳方式是什么?
在名为ForTestingPurposes的视图模型中创建一个新的 bool 属性,当 SaveChanges 方法失败时:
try { Context.SaveChanges(); } catch { if (!ForTestingPurposes) { Context = new WTContext(SettingsManager.Instance.GetConnectionString()); } }
向 mainviewmodel 发送消息以重新加载上下文(通过中介模式):
Mediator.Instance.NotifyColleagues<SolidWoods_VM>(MediatorMessages.NeedToUpdateMyContext, this);
(然而,这样我仍然需要 bool 属性)
3.为你们提供了一个更优雅的解决方案,没有额外的属性:)