Повторно кодиране с модел на единица работа в Entity Framework

Да приемем, че кодът по-долу извлича данни от базата данни чрез шаблон на единица работа. Тъй като GetByID е общата операция, тя може да бъде декларирана в клас Repository.

UnitOfWork w = new UnitOfWork();
w.someRepository.GetByID(10);

Ами ако трябва да извикам метод GetByID в 10 отделни файла. Трябва ли да създам екземпляр на клас UnitOfWork и да извиквам GetByID всеки път или кодовият блок по-долу е валиден за модела UnitOfWork?

public class SomeRepositoryProvider {

public tbl_somerepoclass GetByID(int id) {

   UnitOfWork w = new UnitOfWork();
   return w.someRepository.GetByID(10);


}
}

person TayfunSezer    schedule 03.05.2014    source източник


Отговори (1)


Като цяло дори не трябва да се нуждаете от UnitOfWork, когато искате само да извличате данни от база данни. UnitOfWork е по-скоро транзакция към db - опитвате се да запазите някакъв набор от данни в db наведнъж - ако всичко върви добре, се записва, ако не, тогава всичко се връща назад. За да получите обекти по идентификатори, трябва да имате нужда само от хранилища. Най-доброто решение, което срещнах в практиката си, е за всеки обект да подготвя клас Repository и да подготвя там полезни методи. Само ако искате да запазите данните, използвайте UnitOfWork. Така че обикновено трябва да използвате хранилището си така:

someRepository.GetById(10);

Когато инстанциирате Repository, просто предадете на неговия конструктор правилния обект, необходим за операциите - в случай на рамка на обект ver. > 4.0 DbContext.

Ако искате да добавите нов обект, използвайте го така:

someRepository.Add(newEntity);
unitOfWork.Save();
person mr100    schedule 03.05.2014