Ответ 1
Ваш вопрос не глуп! Начало работы с UnitOfWork
и шаблонами Repository
занимает некоторое время.
Во-первых, чтобы получить некоторую терминологию права. A UnitOfWork
инкапсулирует набор действий и группирует их вместе. Таким образом, вы можете, например, создать клиента, продукт и соответствующий порядок в одной логической группе.
A Repository
предоставляет вам единую точку доступа к объектам, и большую часть времени имеет некоторые конкретные методы для извлечения данных.
Несколько репозиториев могут использоваться в одной транзакции, поэтому они разделяют UnitOfWork
.
В приведенном выше примере файлы T4 создают несколько интерфейсов Repository
. Один из них - только для чтения с методами для выбора сущностей, а другой Repository
имеет методы типа Add
и Delete
.
Итак, если вы хотите добавить объект, вам нужно сначала построить UnitOfWork
, а затем создать экземпляр Repository
для типа сущности, с которым вы работаете (CustomerRepository
или ProductRepository
). Затем вы можете использовать метод Add
для добавления объектов в Repository
. Когда вы закончите работу с вашими репозиториями, вы должны вызвать UnitOfWork.Commit()
, чтобы сохранить изменения в базе данных.
IUnitOfWork unitOfWork = new EFUnitOfWork();
IRepository<Customer> customerRepository = new CustomerEFRepository(unitOfWork);
Customer c = new Customer();
// init customer
customerRepository.Add(c);
unitOfWork.Commit();
В приведенном выше примере используется Injection Dependency с StructureMap. Это целая другая тема, но это означает, что вы не создаете напрямую UnitOfWork
и Repository
, а вводите их в свой код, используя конфигурацию, которую вы установили.