如何使用 EF 6 查询通用模型
How to query on a generic model using EF 6
我正在开发 MVC 5 应用程序。我查询我的数据库为:
var result = db.ABCs.AsNoTracking().FirstOrDefault(e => e.Id == Id);
但是如果我想制作一个通用方法并且在编译时不知道模型的名称怎么办。我想查询在运行时传递给方法的任何模型 class。
像 :
var result = db.<T>.Where(x => x.Id == Id).ToList();
我该怎么做。我正在使用数据库优先方法,没有存储库或 UoW。
为此,您需要提供一些有关 Id
属性 的信息。您可以为所有实体属性创建通用接口:
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);
我正在开发 MVC 5 应用程序。我查询我的数据库为:
var result = db.ABCs.AsNoTracking().FirstOrDefault(e => e.Id == Id);
但是如果我想制作一个通用方法并且在编译时不知道模型的名称怎么办。我想查询在运行时传递给方法的任何模型 class。 像 :
var result = db.<T>.Where(x => x.Id == Id).ToList();
我该怎么做。我正在使用数据库优先方法,没有存储库或 UoW。
为此,您需要提供一些有关 Id
属性 的信息。您可以为所有实体属性创建通用接口:
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);