Ich arbeite mit einer SQL Server-Datenbank mit über 1000 Tabellen, einigen hundert Ansichten und mehreren tausend gespeicherten Prozeduren. Wir möchten Entity Framework für unsere neueren Projekte verwenden und arbeiten an unserer Strategie dafür. Ich möchte wissen, wie ich die Tabellen am besten in verschiedene Modelle aufteilen kann (EDMX oder DbContext, wenn wir zuerst Code verwenden). Ich kann mir auf Anhieb ein paar Strategien vorstellen:
- Nach Schema
aufteilen Wir haben unsere Tabellen auf wahrscheinlich ein Dutzend Schemata aufgeteilt. Wir könnten ein Modell pro Schema erstellen. Dies ist jedoch nicht perfekt, da dbo mit über 500 Tabellen / Views immer noch sehr groß ist. Ein weiteres Problem ist, dass bestimmte Arbeitseinheiten Transaktionen ausführen müssen, die sich über mehrere Modelle erstrecken, was die Komplexität erhöht, obwohl EF dies meiner Meinung nach ziemlich einfach macht. - Nach Absicht
aufteilen Anstatt sich Gedanken über Schemata zu machen, sollten Sie die Modelle nach Absicht aufteilen. Wir haben also verschiedene Modelle für jede Anwendung, jedes Projekt, jedes Modul oder jeden Bildschirm, je nachdem, wie detailliert wir arbeiten möchten. Das Problem dabei ist, dass es bestimmte Tabellen gibt, die zwangsläufig in jedem Fall verwendet werden müssen, z. B. User oder AuditHistory. Fügen wir diese zu jedem Modell hinzu (verstößt meiner Meinung nach gegen DRY), oder befinden sich diese in einem separaten Modell, das von jedem Projekt verwendet wird? - Überhaupt nicht aufteilen - ein Riesenmodell
Aus Sicht der Entwicklung ist dies offensichtlich einfach, aber aus meiner Forschung und meiner Intuition scheint es, als könnte es eine schreckliche Leistung erbringen, sowohl zur Entwurfszeit als auch zur Kompilierungszeit und möglicherweise zur Laufzeit.
Was ist die beste Vorgehensweise für die Verwendung von EF für eine so große Datenbank? Welche Strategien werden speziell beim Entwerfen von Modellen für dieses Volumen von DB-Objekten verwendet? Gibt es Optionen, bei denen ich nicht besser darüber nachdenke als oben?
Ist dies auch ein Problem in anderen ORMs wie NHibernate? Wenn ja, haben sie bessere Lösungen als EF gefunden?