Ваш вопрос не глупый! Начало работы с UnitOfWork
и шаблонами Repository
занимает некоторое время.
Во-первых, чтобы получить некоторую правильную терминолой. 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();
В примере, который вы разместили, используется внедрение зависимостей с StructureMap. Это совсем другая тема, но это означает, что вы не создаете UnitOfWork
и Repository
напрямую, а что они «внедряются» в ваш код с использованием некоторой конфигурации, которую вы настроили.