个人而言,我会选择使用lambda方式。这可能是因为我喜爱lambda,但它可以提供很多空间来建立通用的存储库设置。
考虑以下内容:
bannerRepository.Find.Where(banner => banner.IsFrontendCampaignBanner && banner.IsSmallMediaBanner)
我不知道你的模式是什么样子,但在这里可以重构一些东西:
创建一个名为“ IRepository”的泛型接口,类型包含所有数据访问方法。
它可能看起来像这样:
interface IRepository<T> where T : class
{
IEnumerable<T> FindAll(Func<T, bool> exp);
T FindSingle(Func<T, bool> exp);
}
创建一个实现此接口的抽象“Repository”类:
class Repository<T> : IRepository<T> where T : class
{
TestDataContext _dataContext = TestDataContext();
public IEnumerable<T> FindAll(Func<T, bool> exp)
{
_dataContext.GetTable<T>().Where<T>(exp);
}
public T FindSingle(Func<T, bool> exp)
{
_dataContext.GetTable<T>().Single(exp);
}
}
我们现在可以为横幅表/对象创建一个接口,该接口实现了我们的“IRepository”和一个扩展抽象“Repository”类并实现“IBannerInterface”的具体类:
interface IBannerRepository : IRepository<Banner>
{
}
实现它所需的匹配存储库:
class BannerRepository : Repository<Banner>, IBannerRepository
{
}
我建议使用这种方法,因为它给你很大的灵活性,足够的能力来控制所有微小的实体。
以这种方式调用这些方法将非常容易:
BannerRepository _repo = new BannerRepository()
_repo.FindSingle(banner => banner.IsFrontendCampaignBanner && banner.IsSmallMediaBanner)
是的,这意味着你需要做一些工作,但以后更改数据源对你来说会容易得多。
希望能帮到你!