7

Według MSDN na DbSet:Dlaczego powinienem utworzyć wzór repozytorium z jednostką pracy na górze mojego EF?

DbSet<TEntity> Class 

DbSet represents the collection of all entities in the context lub które można przeszukiwać z bazy danego typu. Obiekty DbSet są tworzone z DbContext za pomocą metody DbContext.Set.


I według MSDN na DbContext:

DbContext Class 

DbContext instance represents a combination of the Unit Of Work and Repository patterns taki sposób, że może on być stosowany do zapytania z bazy danych i grupować zmiany, które będą wtedy odesłano do sklepu jako jednostkę. DbContext jest koncepcyjnie podobny do ObjectContext.


Tak, że EF użyć repository pattern i UOW wewnętrznie.

DbSet < ----> Repository

DbContext < ----> jednostka pracy

Dlaczego powinienem zbudować repozytorium wzorów o jednostce pracy na szczycie mój EF?

+2

Nie powinieneś. Chociaż warstwa usług, w której można skonsolidować logikę biznesową, jest mądra. – Shoe

Odpowiedz

7

Dlaczego powinienem utworzyć wzór repozytorium z jednostką pracy na górze mojego EF?

W zależności od tego, jak chcesz zarządzać swoimi zależnościami.

Jeśli Entity Framework jest twoją warstwą abstrakcji, a sama baza danych jest zależnością, to Entity Framework rzeczywiście zapewnia już twoje repozytoria i jednostkę pracy. Kompromis polega na tym, że twoja domena opiera się na Entity Framework. Dopóki ta zależność jest akceptowalna, jesteś dobry.

Jeśli, z drugiej strony, chcesz traktować samą jednostkę Entity Framework jako zależność, którą można potencjalnie zamienić bez wprowadzania zmian w kodzie domeny, wówczas należy utworzyć abstrakcję jako otoczkę.

Zasadniczo wszystko sprowadza się do miejsca, w którym narysowano linię tego, co jest lub nie jest "zewnętrzną zależnością". W przypadku niektórych projektów to nie ma znaczenia, dla niektórych jest to fizyczny bazy danych, dla niektórych to ramy dostępu do danych, itp

+0

Great, Sometime Powinniśmy użyć EntityTypeMapping, aby uczynić klasę wyraźnie. (Używając FluentAPI). Następnie możemy użyć encji domeny i nie musimy odwoływać się do EntityFramework – huoxudong125

7

Dlaczego powinienem zbudować repozytorium wzorów o jednostce pracy na najwyższym mojego EF?

Z uwagi na Interface Segregation Principle.Sygnatury metod w DbSet i DbContext są w zasadzie dużym bałaganem niskiego poziomu, istnieje ogromna niezgodność między nimi a tym, czego zwykle oczekuje się w repozytorium i jednostce pracy. Innymi słowy, jeśli użyjesz bezpośrednio kodu DbSet i DbContext, twój kod usług aplikacji będzie cierpieć z powodu nieszczelnych abstrakcji.

W warstwie aplikacji należy manipulować odpowiednią semantyką. Kod na tej warstwie musi tylko mówić w kategoriach transakcji biznesowych i dużych kolekcji, w których można pobierać i przechowywać rzeczy. Są to bardzo abstrakcyjne koncepcje na wysokim poziomie, minimalistyczne. Jigsaw Entity Framework jest po prostu zbyt rozmyte i na niskim poziomie, więc musisz wprowadzić inne idiomy - Repository i UoW.

+0

Myślę, że to prawdziwy powód. Ale czasami nie potrzebujemy repozytorium i UoW, jeśli nasz projekt jest mały lub prosty. możemy bezpośrednio odwoływać się do DbContext. – huoxudong125

Powiązane problemy