0

我在EF的應用程序中使用了UnitOfWork和Repository模式。UnitOfWork +存儲庫模式和實體框架模擬

實際上,我的設計規定UnitOfWork將創建ObjectContext類並在Repository具體類中注入內容。例如:

UnitOfWork.cs(初始化)

public DefaultUnitOfWork() { 
    if (_context == null) { 
     _context = new MyDataContext(ConfigSingleton.GetInstance().ConnectionString); 
    } 
} 

UnitOfWork.cs(得到一個存儲庫實例)

public CustomerRepository Customers { 
    get { 
     if (_customers == null) { 
      _customers = new CustomerRepository(_context); 
     } 
     return _customers; 
    } 
} 

存儲庫類有一個已定義這樣的ObjectContext類,他們可以使用它的方法來檢索和更新數據。 這工作很好。

現在我需要執行我的查詢模擬應用程序池標識,因此我決定將代碼包裝在模擬中的UnitOfWork構造函數中。

不幸的是,這不起作用,因爲ObjectContext然後傳遞給存儲庫構造函數,稍後在存儲庫的客戶端調用時使用,例如FindAll()

我已經體會到,在通過實體框架進行查詢之前就已經確定了與數據庫的真正連接,而不是在我創建ObjectContext本身時。

我該如何解決這個問題?

回答

0

例如,您可以使用一個或多個ObjectContext工廠(創建ObjectContexts),並使用不同的創建條件(例如連接字符串)。你的UnitOfWork可以利用一個工廠來獲得它的上下文,倉庫也是如此,但是我認爲如果它利用與你的Repository不同的ObjectContext,你就錯過了UnitOfWork的觀點。

UnitOfWork應由一個或多個應該一起完成的操作組成,這些操作可以輕鬆地利用多個存儲庫。如果這些存儲庫有自己的ObjectContexts與UnitOfWork分開,我沒有看到如何提交UnitOfWork來達到它的目的。

我想我要麼完全誤解了你的問題,要麼你遺漏了一些相關的細節。祝你好運!