В прошлом году я написал статью о написании репозиториев с поддержкой LINQ, которые легко подделать для модульного тестирования и которые хорошо работают с внедрением зависимостей. Вот статья .Вкратце, в статье описывается единица работы, которая имитирует LINQ to SQL DataContext
и включает в себя интерфейс IDataMapper
, который абстрагирует реальный инструмент O / RM.Единица работы содержит свойства типа Repository<TEntity>
, такие как Repository<Customer>
или Repository<Order>
, а класс репозитория реализует IQueryable<T>
, что позволяет вам LINQ поверх него.
IDataMapper
является простыминтерфейс, который выглядит следующим образом:
public interface IDataMapper : IDisposable
{
Repository<T> GetRepository<T>() where T : class;
void Save();
}
Решение, описанное в статье, разработано так, чтобы оно было дружественным к модульному тестированию и DI.Фактически, единственная конфигурация, которая вам нужна, это следующая:
string northwindConnection = GetConStr("Northwind");
container.RegisterSingle<IUnitOfWorkFactory<NorthwindUnitOfWork>>(
new LinqToSqlNorthwindUnitOfWorkFactory(northwindConnection));
container.RegisterSingle<IUnitOfWorkFactory<SalesUnitOfWork>>(
new EntityFrameworkSalesUnitOfWorkFactory());