我有很多这样的类似meyhod:
public static List<MyCatalogViewModel> LoadCatalog1(...)
{
var catalog= DbContext.MyContexClass1.Where(t => !t.Deleted).Select(k=> new MyCatalogViewModel{ Id= k.Id, Name = k.Name}).ToList();
return catalog;
}
public static List<MyCatalogViewModel> LoadCatalog2(...)
{
var catalog= DbContext.MyContexClass2.Where(t => !t.Deleted).Select(k=> new MyCatalogViewModel{ Id= k.Id, Name = k.Name}).ToList();
return catalog;
}
我从DbContext
获取数据。差异仅在DBSet<>
我如何制作通用方法而不是这种方法?
类MyContexClass2
和MyContexClass1
都有属性Id
和Name
。看起来像:
public partial class MyContexClass1: AccountableDbObject
{
public MyContexClass1()
{
<..some code..>
}
public override int Id{ get; internal set; }
public string Name { get; set; }
<...Another properties...>
}
答案 0 :(得分:3)
DbContext
有一个Set<T>
方法,允许检索一组任意实体(只要它们的类型在上下文中注册)。
<强>更新强>
要实际使用在这些泛型类型上定义的属性,您需要模型类来实现公共接口:
public interface ICatalogItem { //or some other name
bool Deleted { get; }
int Id { get; }
string Name { get; }
}
E.g。您的MyContexClass1
定义将变为
MyContexClass1 : AccountableDbObject, ICatalogItem
现在,您可以构建一个返回相应视图模型的通用方法:
public static List<MyCatalogViewModel> LoadCatalog<T>()
where T : class, ICatalogItem
{
var catalog= DbContext.Set<T>.Where(t => !t.Deleted).Select(k=> new MyCatalogViewModel{ Id= k.Id, Name = k.Name}).ToList();
return catalog;
}