我在當前項目中使用WPF,MVVM和實體框架。刷新ViewModel的實體框架上下文
爲了簡單起見,我們假設我有一個針對CRUD操作的視圖模型,用於列出材質(實體木材)。
我的視圖模型的EF上下文(WTContext)通過屬性注入初始化,例如:
SolidWoods_VM newView = new SolidWoods_VM();
newView.Context = new WTContext(SettingsManager.Instance.GetConnectionString());
這樣我能夠測試這個視圖模型:
SolidWoods_VM swVM = new SolidWoods_VM();
swVM.Context = new FakeWTContext();
試想一下,在插入操作出錯,WTContext.SaveChanges()失敗。 刷新ViewModels上下文的最佳方式是什麼?
在名爲ForTestingPurposes的視圖模型創建一個新的布爾屬性,並且當SaveChanges方法失敗:
try { Context.SaveChanges(); } catch { if (!ForTestingPurposes) { Context = new WTContext(SettingsManager.Instance.GetConnectionString()); } }
發送一個消息給mainviewmodel上下文(通過介體圖案)重裝:
Mediator.Instance.NotifyColleagues<SolidWoods_VM>(MediatorMessages.NeedToUpdateMyContext, this);
(然而,這樣我仍然需要布爾屬性)
3.A更優雅的解決方案,沒有aditional的特性,提供你們:)
雖然我正在閱讀你的答案,我意識到,即使有消息選項,我需要有bool屬性......我正在尋找一個選項,我不需要聲明特定於測試的屬性。 –