Я использовал шаблоны 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
.
Как я могу решить эту проблему?