Sto lavorando con un database SQL Server con oltre 1000 tabelle, altre 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 alla nostra strategia per farlo. La cosa a cui sono bloccato è il modo migliore di dividere le tabelle in diversi modelli (EDMX o DbContext se andiamo prima al codice). Posso pensare ad alcune strategie fin dall'inizio:
- Dividi per schema
Abbiamo le nostre tabelle divise probabilmente attraverso una dozzina di schemi. Potremmo fare un modello per schema. Questo non è perfetto, tuttavia, perché dbo finisce per 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 aumenta la complessità, anche se presumo che EF lo renda abbastanza semplice. - Dividi per intento
Invece di preoccuparti degli schemi, dividi i modelli per intento. Quindi avremo modelli diversi per ogni applicazione, progetto, modulo o schermo, a seconda di quanto vogliamo ottenere. Il problema che vedo con questo è che ci sono alcune tabelle che inevitabilmente devono essere utilizzate in ogni caso, come Utente o AuditHistory. Aggiungiamo quelli a ogni modello (viola il DRY credo) o quelli in un modello separato che viene utilizzato da ogni progetto? - Non dividere affatto: un modello gigante
Questo è ovviamente semplice dal punto di vista dello sviluppo, ma dalla mia ricerca e dalla mia intuizione sembra che potrebbe funzionare in modo terribile, sia in fase di progettazione, in fase di compilazione e possibilmente in fase di esecuzione.
Qual è la migliore pratica per usare EF contro un database così grande? In particolare, quali strategie utilizzano le persone nella progettazione di modelli rispetto a questo volume di oggetti DB? Ci sono opzioni a cui non sto pensando che funzionano meglio di quello che ho sopra?
Inoltre, questo è un problema in altri ORM come NHibernate? In tal caso, hanno trovato soluzioni migliori di EF?