2012-02-22 87 views
1

我有一個關於泛型列表的問題。實體框架泛型列表

假設我有一個包含三個表,用戶表,Order表和項目表的數據庫。

在C#代碼,我希望有一個功能,叫的GetList得到所有他從三個表的一個記錄。

如果我不使用泛型方法,我要創建3種不同的方法,它看起來像GetAllUsers(),GetAllOrders()和GetAllItems()。在這3種方法中,我將不得不編寫linq來查詢數據庫。

我的問題是如何實現一個通用的方法。

我想使用EF 4.1。我知道如何使用NHibrate tho來做到這一點。

UPDATE

這個是什麼?我發現它的另一篇文章中,它可以被用來獲得一個單獨的記錄

 public T GetSingleEntity<T>(Expression<Func<T,bool>> expression) where T:class 
    { 
     using (PersonalLinksEntities dbContext = new PersonalLinksEntities()) 
     { 
      return dbContext.CreateObjectSet<T>().SingleOrDefault(expression); 
     } 

    } 

PersonalLinksEntities由EF生成的,它是數據庫第一款車型。

這是我如何調用該方法

public ActionResult Index() 
    { 
     var thisOne = base.GetSingleEntity<PersonalRecord>(r=>r.RecordID==1);    
     return View(); 
    } 

回答

1

具體的實現要依賴於你正在使用訪問您的數據是什麼。 NHib,EF,L2S?這些都有一些訪問IQueryable的方法。

你會暴露的方法,如:

public IQueryable<T> GetQueryable<T>() 
{ 
    //Implementation depends on your data provider 
    //return dataContext.GetTable<T>(); 
    //return session.Query<T>(); 
} 

,不過也許你想要做的是遵循一個存儲庫模式具有不同的資源庫爲每種類型。但是您可以使用接受類型參數且可重用的抽象基礎知識庫。

public abstract class RepositoryBase<T> 
{ 
    public IQueryable<T> GetQuery() 
    { 
    //Implementation determined by provider 
    } 

} 
+0

有趣的是,因爲是由EF自動生成(數據庫第一)我的DbContext,我甚至不有一個名爲.GetTable()方法......這就是爲什麼我試圖找到一種方式中高音。 – HorseKing 2012-02-22 19:13:42

+0

// return session.Query ();那是NHibrate,不是嗎? – HorseKing 2012-02-22 19:13:58

+0

是的,只是在幾個例子中彈出...我比EF更像一個NHIb傢伙。這在很多方面都更好。 – swannee 2012-02-22 19:15:48

0

由於有在問題關於你已經寫了什麼沒有詳細說明。如果你只是想從表中獲取所有記錄...爲什麼LINQ ...?您可以簡單地在一個方法中使用數據集和數據適配器來查詢數據庫,並通過該通用方法傳遞表名並獲取數據集,然後您可以隨意使用該數據集。如果在這種情況下我缺少特定的複雜性,請詳細說明。

0

在DbContext中已經存在一個叫做Set的方法,例如, var results = dbContext.Set();

如果你正在使用的ObjectContext然後你想用的方法CreateObjectSet()。