Próbuję zaimplementować wiele kontekstów ograniczonych przez DDD zgodnie z opisem here. Jest to kontekst przykład:Zarządzanie konfiguracją encji z kontekstami ograniczonymi DDD
Mam plik konfiguracji typu jednostki dla każdego podmiotu z odpowiednich przekształceń FluentAPI (reverse zaprojektowane przy użyciu oprzyrządowania EF). Te pliki konfiguracyjne zawierają również konfiguracje relacji.
np .: UserMap.cs
// Relationships
this.HasOptional(t => t.SecurityProfile)
.WithMany(t => t.Users)
.HasForeignKey(t => t.SecurityProfileCode);
SecurityProfile
i DomainPermission
nie DbSets
w kontekście. Są automatycznie wprowadzane do modelu ze względu na właściwości nawigacji odpowiednio na User
i Module
.
Powoduje to mój pierwszy problem. Podczas dodawania User
(lub inny podmiot) na jakimkolwiek innym kontekście muszę pamiętać, aby zrobić jedną z dwóch rzeczy:
dodać także konfigurację dla modelu Builder
SecurityProfile
(i każdy inny związek o podmiocie)Wykluczyć
SecurityProfile
z modelu jawnie jakoś.
Zaczyna się to troche koszmarnym utrzymaniem.
Byłbym usatysfakcjonowany wyraźnym "obcięciem" wykresu podmiotu, jak opisano w punkcie 2 powyżej.
Jednak nie wydaje się możliwe Ignore()
jednostek, gdy relacje są już zdefiniowane w plikach konfiguracyjnych encji.
Próbując modelBuilder.Ignore<SecurityProfile>();
na powyższym kontekście OnModelCreating
daje następujący błąd w ConfigureAssociations()
:
System.InvalidOperationException: właściwość nawigacji „SecurityProfile” nie jest zadeklarowana na właściwość typu „użytkownik”. Sprawdź, czy nie została wyraźnie wykluczona z modelu i czy jest to poprawna właściwość nawigacji.
Jedyne rozwiązanie, jakie mogę wymyślić, to odziedziczyć podstawowe klasy konfiguracji i przesłonić konfigurację relacji w każdym kontekście. Biorąc pod uwagę, że możemy skończyć z 30-40 osobnymi kontekstami, może to również stać się koszmarem dla utrzymania.
Alternatywnie mogłem mieć bardzo konkretne modele jednostek dla każdego kontekstu, ale znowu prowadziłoby to do wybuchu klasy jednostki i potencjalnego problemu konserwacji w zduplikowanej konfiguracji.
Jak najlepiej zarządzać i zarządzać konfiguracjami podmiotów i ich jednostek podczas wdrażania kontekstów ograniczonych?
Dziwne, że ktoś będzie głosować, aby zamknąć ten rozważa [EF projektu site] (http://entityframework.codeplex.com/discussions) stwierdza: „W przypadku pytań o użyciu Entity Framework w swojej aplikacji prosimy umieścić pytanie na przepełnienie stosu za pomocą znacznik entity-framework. " –
Jeśli spojrzysz na zakończenie głosowania, zobaczysz, że był "zbyt szeroki". I zgadzam się z tym. Masz trzy pytania, a nie jedno. Uwaga dodatkowa: DDD mówi, że wasze istoty powinny być nieświadome tego, czego wasze zwierzęta nie są, ponieważ oczywiście trzeba je zmienić, aby pasowały do wymogów EF. – jgauffin
@jgauffin Z przyjemnością skropię 3 pytania do trzeciego. Jednak nie jest to proste pytanie "jak to zrobić", a informacje ogólne są pomocne we wszystkich 3 pytaniach. A zatem powód, dla którego jest "zbyt szeroki", nie jest ważny, ponieważ uważa się, że SO jest zalecanym gniazdkiem do zadawania tego typu pytań. Być może jest to problem związany z przejęciem SO przez SOA jako kanał społecznościowy. Ale najwyraźniej bez żadnych innych opcji, to jedyny punkt wyjścia, na który mam nadzieję uzyskać odpowiedź. –