2011-06-03 76 views
1

我有EF的實體,稱爲註冊,我用投擲各種有用的東西在我的典型的查詢看起來是這樣的:抽象訪問實體框架

db.Registry 
    .Where(x => x.Domain == "SomeDomain" && x.Key == "SomeKey") 
    .Select(x => x.Value) 
    .Single(); 

其中db是類型的變量EFContainer。而不是所有的地方這種查詢我想寫點東西簡單多了,也許是這樣的:

Registry.Get(Key: "SomeKey", Domain: "SomeDomain") 

,但問題是,爲了使這種方式來訪問它需要實例EFContainer數據庫當它發生時,我開始有IEntity更改跟蹤器無法處理第二個連接的錯誤。我想我可以通過我的db變量的方法,但這是eeky。

完成此操作的好方法是什麼?

回答

3

執行此操作的典型方法是創建一個RegisterRepository並將EFContainer注入到存儲庫的構造函數中或注入一個用於創建容器的機制。

public class RegistryRepository { 
public RegistryRepository(EFContainer db) { 
    this.db = db; 
} 

readonly EFContainer db; 

public Registry Get(string domain, string key) { 
// implementation here 
} 

} 

在此實現中,您必須考慮如何獲取對存儲庫的引用以及如何構建存儲庫。您可以使用dependency injection框架將EF容器和存儲庫註冊爲適當的生命週期範圍。例如,如果您正在開發一個ASP.NET應用程序,則EF上下文將以存儲庫的HTTP請求爲範圍。

+0

所以沒有必要通過容器。嘆息......但感謝依賴注射的鏈接! (對我來說是新的東西) – ekkis 2011-06-04 17:52:58

+0

順便說一句,我發現真正沒有問題實例化容器兩次,只要你不混合它們即object-from-container-1.property = object-from-容器2 – ekkis 2011-06-04 18:03:27