Cześć,
uczę się Entity Framework Core i próbuję zrobić "bardziej zaawansowany" projekt z podziałem na kilka bibliotek. Jaką strukturę rozwiązania polecacie? Gdy używałem ADO.NET, tworzyłem zawsze:
- Projekt.DatabaseAccess - pobieranie connection stringów z pliku i przechowywanie bieżącego podczas sesji aplikacji
- Projekt.Shared - bazowe klasy dla modeli (implementujące INotifyPropertyChanged)
- np. Projekt.Customers - wszystkie modele dot. klientów i statyczne klasy z metodami CRUD.
Customers odwoływał się wtedy do DatabaseAccess (żeby mieć bieżącego connection stringa dla CRUDów) i do Shared.
Używając EfCore chciałem osiągnąć podobną strukturę, więc:
- Projekt.DatabaseAccess - pobieranie connection stringów z pliku, główny DbContext i DbContextFactory (IDesignTimeDbContextFactory) dla tworzenia migracji
- Projekt.Shared - bazowe klasy
- Projekt.Customers - modele dot. klientów i repozytorium (z podawanym DbContext w konstruktorze) dla CRUDów
I tu napotkałem się na problem - repozytorium korzysta z DbContext dla swoich operacji (czyli relacja z Projekt.DatabaseAccess), a w DbContext mam zdefiniowane DbSety, które odnoszą się do Projekt.Customers. Tworzy się błędne koło, bo w Visual Studio nie można dodać zależności Projekt A <--> Projekt B.
Jedyne rozwiązanie jakie udało mi się wymyślić, to stworzyć kolejny projekt - Customers.Repositories, który odnosi się do DatabaseAccess i Customers. Mam jednak wrażenie, że można to zrobić jakoś lepiej.
Zależy mi na tym, aby zachować podział na różne strefy programu (Projekt.Customers, Projekt.Planning, Projekt.HR, ....)
Czy są jakieś inne rozwiązania? Czy może istnieją lepsze sposoby podziału aplikacji?
PS: Projekt. w nazwach projektów to np. SauerkrautCRM, żeby ktoś się zaraz o to nie doczepił : )