2012-02-22 88 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()。