Използвал съм модели 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;
}
}
По този начин класовете Repository имат вече дефиниран клас ObjectContext и могат да използват неговите методи за извличане и актуализиране на данни. Това работи добре.
Сега трябва да изпълня заявките си, олицетворявайки идентичността на набора приложения, така че реших да обвия кода в конструктора на UnitOfWork в олицетворението.
За съжаление това не работи, защото ObjectContext
след това се предава на конструктора на хранилището и се използва по-късно, когато клиент на хранилището извика, например, FindAll()
.
Имам опит, че истинската връзка с базата данни се прави точно преди извършване на заявката от Entity Framework, а не точно когато създавам самия ObjectContext
.
Как мога да разреша този проблем?