Я использую EF с шаблоном репозитория, он сохраняет мне чертовски много работы!
Небольшое введение в репозиторий:
someRepository.Find.Where(something => something.IsRed && something.IsBig)
Создайте универсальный интерфейс с именем «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(); // Would be your EF Context
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);
}
}
Теперь мы можем создать интерфейс для таблицы / объектов something
, который реализует наш 'IRepository' и конкретный класс, расширяющий абстрактный класс 'Repository' и реализующий 'ISomethingInterface':
interface ISomethingRepository : IRepository<Banner>
{
}
И соответствующий репозиторий для его реализации:
class SeomthingRepository : Repository<Banner>, IBannerRepository
{
}
Я бы предложил использовать этот подход, поскольку он дает вам большую гибкость и достаточную мощность для управления всеми крошечными объектами, которые у вас есть.
Вызывать эти методы будет очень просто:
SomethingRepository _repo = new SomethingRepository ();
_repo.Find.Where(something => something.IsRed && something.IsBig)
Да, это означает, что вам нужно выполнить какую-то работу, но вам будет гораздо проще изменить источник данных позже.
Надеюсь, это поможет!