2016-12-01 82 views
4

在C#WPF中處理Linq數據庫DataContext的最佳方式(練習)是什麼?使用在每個viewModel中共享的全局應用程序範圍的DataContext,或者爲每個事務打開一個自己的DataContext?Linq DataContext最佳實踐

根據關於msdnStackOverflow的信息,建議爲每個事務創建一個新的DataContext。但在我的情況下,我想在一個視圖模型中查找數據並將它們傳遞給另一個視圖模型來更改值。在更改視圖模型中創建新的DataContext會導致對象狀態不匹配。 (在第一視圖模型的選擇的對象不存在於第二視圖模型的DataContext的存在,由於對象綁定到較舊的DataContext)序列圖以更好地理解

enter image description here

的「EditViewModel」是不能夠使用新的DataContext編輯傳遞的值,因爲該對象與「LookupViewModel的」DataContext相關。

我想過關於傳遞DataContext。但是由於LookupViewModel在調用editViewModel時沒有時間限制,因此DataContext可能會過時。 (刷新將是必不可少的)。此外,有時我從不同的DataContexts值的不同viewModel傳遞給一個editViewModel。

我怎麼能踏在其他的DataContext從一個DataContext對象,而不接受任何例外?或者我不應該完全重新考慮整個應用程序設計?

+1

有一個不錯的博客阿布t進入某些解決方案的DataContext範圍。它適用於實體框架,但同樣適用於linq http://mehdi.me/ambient-dbcontext-in-ef6/ – Mats391

回答

1

你的ViewModels不應該知道的DataContext,它太低層次的細節他們。

而且他們絕對不應該創造它們! - 所以你應該做的第一件事是看看Ioc \ DI模式。

此外,你應該添加附加層(通常稱爲DAL)來管理DB狀態的抽象這種低級別的細節。

另外,如果您的應用程序是大,考慮的UnitOfWork模式存儲庫。

因此,得出結論: 你應該看看這三個OO模式:

  1. Dependency injection

  2. DAL

  3. Repository (and maybe UnitOfWork)

+0

感謝這些關鍵字。要深入瞭解這些。 –