/ / Wzorzec repozytorium i zagregowany wzorzec główny i Entity Framework - .net, encja-struktura, wzorzec repozytorium, agregatoot

Wzorzec repozytorium i zagregowany wzorzec główny i struktura encji - .net, struktura-entity, wzorzec repozytorium, agregatoroot

Architektuję swoją aplikację na podstawie wzoru Repozytorium, Aggregate root i Unit of work. Używam Entity Framework5 jako ORM.

Jestem w sytuacji, w której nie wiem, jak kontynuować dodawanie nowych bytów, które są zagregowanymi pierwiastkami i mają relację klucza obcego do bytów, które nie są zagregowanymi pierwiastkami.

Nie jestem pewien, czy moje poprzednie stwierdzenie miało sens, ale pozwólcie, że podam tutaj przykład.

Tabela osób w Db (To jest zagregowany katalog główny w mojej aplikacji)

  1. Imię
  2. Wiersz adresu 1
  3. CountryID

Tabela krajów (nie jest to zagregowany katalog główny, ponieważ może nigdy nie będę musiał pytać o nie niezależnie)

  1. CountryID
  2. Nazwa kraju

W mojej aplikacji mam PersonsRepository, które implementuje ogólne Repozytorium, w którym T jest korzeniem zagregowanym.

Teraz, kiedy tworzę nową osobę w kodzie, potrzebujęaby dodać kraj do właściwości nawigacji obiektu osoby. Jeśli utworzę nowy obiekt kraju i przypiszę go do właściwości osoby osoby i spróbuję zapisać obiekt osoby, EF wyrzuca błąd. Nie mogę wysłać zapytania do tabeli Kraje, ponieważ nie jest to mój katalog główny Aggregate.

Cóż, to nie jest mój rzeczywisty scenariusz, ale to właśnie staram się pokonać. Jak mam stąd postępować?

Jedną z moich myśli jest stworzenieogólne repozytorium tylko do odczytu, które będzie używane do odpytywania bazy danych i nie modyfikowania jej, czy to dobry sposób na kontynuację, czy też robię coś złego.

Z góry dziękuję za odpowiedź i przeczytanie długiego postu.

Odpowiedzi:

5 dla odpowiedzi № 1

Zbiorcze korzenie to nie tylko rzeczy, które możesznie trzeba bezpośrednio pytać. Według twojego rozumowania musiałbyś wiele razy stworzyć ten sam kraj, ponieważ nie możesz zapytać, czy kraj opuszcza (tj. Kraj jest słabą tabelą, która wymaga istnienia Osoby).

Po prostu korzenie agreggate są obiektami, które potrafiąbyć zidentyfikowanym bez niczego innego. Kraj może istnieć bez osoby, a wiersza zamówienia nie można zidentyfikować bez zamówienia. Możesz przeczytać ten artykuł: http://dddcommunity.org/library/vernon_2011

Jeśli chodzi o środowisko encji, sprawdź moją implementację repozytorium / uow: http://blog.gauffin.org/2013/01/repository-pattern-done-right/