如何使用EF 6查询通用模型

时间:2015-09-28 11:44:43

标签: c# entity-framework linq generics reflection

我正在开发一个MVC 5应用程序。我在我的数据库上查询:

var result = db.ABCs.AsNoTracking().FirstOrDefault(e => e.Id == Id);

但是,如果我想创建一个泛型方法并且在编译时不知道模型的名称,该怎么办?我想查询在运行时传递给方法的任何模型类。 有点像:

var result = db.<T>.Where(x => x.Id == Id).ToList();

我该怎么做?我使用数据库第一种方法,没有存储库或UoW。

1 个答案:

答案 0 :(得分:1)

为此,您需要提供有关Id属性的一些信息。您可以使用common为所有实体属性创建接口:

interface IEntity
{
    int Id {get;}
}

在你的课程中实现它:

class ABC : IEntity
{
    int Id {get; set;} 
    string Name {get;set;}
}

List<T> GetData<T>(int id) where T : class, IEntity
{
    var result = db.Set<T>().Where(x => x.Id == Id).ToList();
    return result;
}

...

var data = GetData<ABC>(10);