老路
直到現在我創建dbContext如下,所以dbContext它應該是短暫的(dbContext它只對特定操作有效)。
using (var dbContext = new MainDbContext())
{ ... }
新方法
現在我嘗試將 DI 用于dbContext. 暫時我不想使用任何 DI 容器,只是純 DI。
public partial class MainWindowViewModel
{
IMainDbContext dbContext;
public MainWindowViewModel(IMainDbContext dbContext)
{
this.dbContext = dbContext;
}
}
我的作文根在 OnStartup
private void OnStartup(object sender, StartupEventArgs e)
{
var mainWindowViewModel = new MainWindowViewModel(new MainDbContext());
...
}
我不喜歡這種新方法,因為dbContext它始終處于活動狀態,而不僅僅是針對特定操作。1. 有替代品嗎?
我有幾個 ViewModel。2. 我應該dbContext對所有這些都使用同一個實體嗎?
新方法總是MainDbContext在組合中創建,盡管我可能不會在需要MainDbContext. 3. 有解決方法嗎?
uj5u.com熱心網友回復:
您的問題主要是基于意見的,即真的沒有對錯之分。
在 N 層企業應用程式中,EF 背景關系應該只存在于服務器端的資料訪問層 (DAL) 中。客戶端通常通過使用背景關系來獲取資料的服務層來使用資料庫。
您是否應該對所有視圖模型使用相同的背景關系取決于您的資料庫操作是否跨越多個視圖模型。例如,您是否使用一個視圖模型修改物體并通過呼叫SaveChanges()另一個視圖模型來保持更改?那么至少在這兩個視圖模型之間共享背景關系是有意義的。
長期與短期環境的相同故事。這取決于你的場景。但是如果您將背景關系注入某些視圖模型,您可能希望將其注冊為單例實體。如果需要,您始終可以在其他視圖模型中使用短期(非注入)背景關系。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/355770.html
