Sto lavorando con un database SQL Server con oltre 1000 tabelle, altre poche centinaia di visualizzazioni e diverse migliaia di stored procedure. Stiamo cercando di iniziare a utilizzare Entity Framework per i nostri nuovi progetti e stiamo lavorando sulla nostra strategia per farlo. La cosa su cui sono impiccato è il modo migliore per dividere le tabelle in modelli diversi (EDMX o DbContext se prima andiamo al codice). Posso pensare a qualche strategia a prima vista:
-
Dividi per schema
Abbiamo le nostre tabelle divise in una dozzina di schemi. Potremmo fare un modello per schema. Questo non è perfetto, però, perché dbo continua a essere molto grande, con oltre 500 tabelle / viste. Un altro problema è che alcune unità di lavoro finiranno per dover fare transazioni che si estendono su più modelli, il che si aggiunge alla complessità, anche se presumo che EF lo renda abbastanza semplice. -
Dividi per intento
Invece di preoccuparsi degli schemi, dividi i modelli per intento. Quindi avremo modelli diversi per ogni applicazione, progetto, modulo o schermo, a seconda di quanto granulare vogliamo ottenere. Il problema che vedo con questo è che ci sono alcune tabelle che devono inevitabilmente essere utilizzate in ogni caso, come User o AuditHistory. Li aggiungiamo a tutti i modelli (viola DRY credo), o sono quelli in un modello separato che viene utilizzato da ogni progetto? -
Non dividere affatto - un modello gigante
Questo è ovviamente semplice da una prospettiva di sviluppo, ma dalla mia ricerca e dalla mia intuizione sembra che potrebbe comportarsi in modo terribile, sia in fase di progettazione, sia in fase di compilazione, sia in termini di tempo di esecuzione.
Qual è la migliore pratica per usare EF contro un database così grande? In particolare quali strategie usano le persone nella progettazione di modelli contro questo volume di oggetti DB? Ci sono opzioni che non sto pensando a quel lavoro meglio di quello che ho sopra?
Inoltre, questo è un problema in altri ORM come NHibernate? Se sì hanno trovato soluzioni migliori di EF?