我的数据库中有大量的表在本质上支持数据。这些表列出了国籍,性别,语言等,并且都基于相同的数据模型:
public class SupportDataModel
{
public int Id { get; set; }
public string Name { get; set; }
public bool Deleted { get; set; }
}
public class Gender : SupportDataModel
{
}
此数据主要在DropDownList控件中显示,因此我需要查询每个表以获取列表。由于我不需要每次访问数据时都必须重写此查询,因此将其编写为辅助类:
public class GendersHelper : IAlternateHelper<Gender>
{
public List<Gender> ListItems()
{
using (var db = new ApplicationDbContext())
{
return db.Genders.Where(x => !x.Deleted).ToList();
}
}
}
对于这些类中的每一个,该函数除了在其查询的表中均相同。这就是为什么我想编写一个类,该类使用传入的类型作为我要查询哪个表的决定因素,但是我不知道该怎么做。
这是我到目前为止所拥有的...
public abstract class SupportingDataHelper<T>
{
public List<T> ListItems()
{
// Logic to determine which table gets queried,
// as well as the query itself should go here.
}
}
如何获取此方法以确定要查询的表的类型,然后返回这些项的列表?
答案 0 :(得分:2)
您可以只使用DbContext.Set<T>
来返回所选类型的集合:
public class SupportDataRepository<T> where T : SupportDataModel
{
public List<T> ListItems()
{
using (var db = new ApplicationDbContext())
{
return db.Set<T>().Where(x => !x.Deleted).ToList();
}
}
}
但是,我不会将其称为Helper
类,因为它看起来更像是一个存储库。
要考虑的另一件事是,您绝对不想创建一个空类,例如:
public class Gender : SupportDataModel
{
}
因为它没有多大意义。也许您可能想使用enum
属性来定义SupportDataModel
的类型。在这种情况下,您将只有一个表(尽管有更多行),一个具有简单存储库类且没有继承或泛型的简单类。