Pracuję z bazą danych SQL Server z ponad 1000 tabel, jeszcze kilkaset widoków i kilka tysięcy procedur przechowywanych. Chcemy zacząć korzystać z Entity Framework w naszych nowszych projektach i pracujemy nad naszą strategią. To, na czym się rozłączam, polega na tym, jak najlepiej podzielić tabele na różne modele (EDMX lub DbContext, jeśli najpierw uruchomimy kod). Mogę od razu wymyślić kilka strategii:
- Podzielone według schematu
Mamy tabele podzielone na prawdopodobnie kilkanaście schematów. Możemy wykonać jeden model na schemat. Nie jest to jednak idealne, ponieważ dbo wciąż jest bardzo duże, z ponad 500 tabelami / widokami. Innym problemem jest to, że niektóre jednostki pracy będą musiały dokonywać transakcji obejmujących wiele modeli, co zwiększa złożoność, chociaż zakładam, że EF czyni to dość prostym. - Podziel według zamiarów
Zamiast martwić się o schematy, podziel modele według zamiarów. Będziemy więc mieć różne modele dla każdej aplikacji, projektu, modułu, ekranu, w zależności od tego, jak bardzo chcemy uzyskać szczegółowość. Problem, jaki tu widzę, polega na tym, że istnieją pewne tabele, które nieuchronnie muszą być używane w każdym przypadku, takie jak Użytkownik lub AuditHistory. Czy dodajemy je do każdego modelu (chyba narusza DRY), czy też są w osobnym modelu, który jest używany w każdym projekcie? - Nie dziel się wcale - jeden gigantyczny model
Jest to oczywiście proste z punktu widzenia rozwoju, ale z moich badań i mojej intuicji wydaje się, że może on działać strasznie, zarówno w czasie projektowania, podczas kompilacji, jak i w czasie wykonywania.
Jaka jest najlepsza praktyka używania EF przeciwko tak dużej bazie danych? W szczególności, jakie strategie stosują ludzie przy projektowaniu modeli w stosunku do tej liczby obiektów DB? Czy są opcje, o których nie myślę, że działają lepiej niż to, co mam powyżej?
Czy jest to również problem w przypadku innych ORM, takich jak NHibernate? Jeśli tak, to czy wymyślili jakieś lepsze rozwiązania niż EF?