Вот небольшое пошаговое руководство по шаблону репозитория с использованием EF Framework:
someRepository.Find.Where(something => something.IsRed && something.IsBig)
Создайте универсальный интерфейс с именем 'IRepository' типа T
, содержащий все методы для доступа к данным.
Это может выглядеть так:
interface IRepository<T> where T : class
{
IEnumerable<T> FindAll(Expression<Func<T, bool>> exp);
T FindSingle(Expression<Func<T, bool>> exp);
// And many more!
}
Создайте абстрактный класс 'Repository', реализующий этот интерфейс:
class Repository<T> : IRepository<T> where T : class
{
TestDataContext _dataContext = TestDataContext(); // Would be your EF Context
public IEnumerable<T> FindAll(Expression<Func<T, bool>> exp)
{
_dataContext.GetTable<T>().Where<T>(exp);
}
public T FindSingle(Expression<Func<T, bool>> exp)
{
_dataContext.GetTable<T>().Single(exp);
}
// And many more!
}
Теперь мы можем создать интерфейс для таблицы / объектов ModelClass
, который реализует наш «IRepository» и конкретный класс, расширяющий абстрактный класс «Repository» и реализующий «IModelClassInterface»:
interface IModelClassRepository : IRepository<ModelClass>
{
}
И соответствующий репозиторий для его реализации:
class ModelClassRepository : Repository<ModelClass>, IModelClassRepository
{
}
Я бы предложил использовать этот подход, поскольку он дает вам большую гибкость и достаточную мощность для управления всеми крошечными объектами, которые у вас есть.
Вызывать эти методы будет очень просто:
ModelClassRepository _repo = new ModelClassRepository();
_repo.Find.Where(something => something.IsRed && something.IsBig)
Да, это означает, что вам нужно выполнить какую-то работу, но вам будет намного проще изменить источник данных позже.
Вы даже можете переключать EF Framework с любым поставщиком данных на ваш выбор. Будь то XML, db4o или обычный старый Txt.