我正在开发一个MVC 5应用程序。我查询我的数据库为:
var result = db.ABCs.AsNoTracking().FirstOrDefault(e => e.Id == Id);
但是如果我想创建一个泛型方法,并且在编译时不知道模型的名称该怎么办?我想查询在运行时传递给方法的任何模型类。如:
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);