Я использовал шаблоны UnitOfWork и Repository в своем приложении с EF.
На самом деле мой дизайн предусматривает, что UnitOfWork будет создавать класс ObjectContext и внедрять его в конкретный класс Repository. Например:
UnitOfWork.cs (инициализация)
public DefaultUnitOfWork() {
if (_context == null) {
_context = new MyDataContext(ConfigSingleton.GetInstance().ConnectionString);
}
}
UnitOfWork.cs (получение экземпляра репозитория)
public CustomerRepository Customers {
get {
if (_customers == null) {
_customers = new CustomerRepository(_context);
}
return _customers;
}
}
Таким образом, классы репозитория имеют уже определенный класс ObjectContext, и они могут использовать его методы для извлечения и обновления данных.
Это хорошо работает.
Теперь мне нужно выполнить свои запросы, олицетворяющие удостоверение пула приложений, поэтому я решил обернуть код в конструкторе UnitOfWork в олицетворение.
К сожалению, это не работает, потому что ObjectContext
затем передается в конструктор репозитория и используется позже, когда клиент репозитория вызывает, например, FindAll()
.
Я обнаружил, что реальное соединение с базой данных устанавливается прямо перед выполнением запроса Entity Framework, а не точно, когда я создаю сам ObjectContext
.
Как я могу решить эту проблему?