C'è un modo per combinare code-first e database-first nello stesso contesto? Quando si modifica il file EDMX si verificano enormi problemi di prestazioni in fase di sviluppo (occorrono 1,5 minuti per il salvataggio). Ho spostato le nostre operazioni di inserimento / aggiornamento / eliminazione delle UDF / stored proc su alcuni modelli T4 personalizzati che generano automaticamente il codice del modello, ma non riesco a ottenere l' OnModelCreating
di OnModelCreating quando è coinvolto EDMX.
Altre cose che abbiamo considerato, ma non funzioneranno per un motivo o un altro:
Non possiamo (ragionevolmente) separare il nostro codice in più contesti in quanto vi è una grande sovrapposizione nelle nostre relazioni tra entità. Sembra anche che un buon popolo che ha seguito questa strada se ne rammarica.
Abbiamo provato ad avere 2 contesti diversi, ma ci sono parecchi join tra Entities e UDF. Questa potrebbe essere la nostra ultima speranza, ma mi piacerebbe davvero evitarlo.
Non possiamo passare a Dapper poiché purtroppo abbiamo fatto un uso pesante di IQueryable
.
Abbiamo cercato di passare completamente a Code-First, ma ci sono funzionalità che stiamo utilizzando in EDMX che non sono supportate (principalmente relative alla mappatura di stored procedure insert / update / delete).
Grazie a tutti per le risposte ben ponderate e approfondite.
Molte di queste altre risposte presuppongono che i mapping delle stored procedure in EF Code-First funzionino allo stesso modo, ma non lo fanno. Sono un po 'confuso su questo perché sono passati circa 6 mesi da quando l'ho guardato, ma credo che dal codice EF 6.3 le prime stored procedure richiedano il passaggio di ogni colonna dall'entità alla stored procedure di inserimento / aggiornamento e che tu passa solo le colonne chiave alla procedura di cancellazione. Non esiste un'opzione per scegliere e scegliere quali colonne puoi passare. Abbiamo l'obbligo di mantenere chi ha cancellato un record, quindi dobbiamo passare alcune informazioni aggiuntive oltre a una semplice chiave.
Detto ciò, ho finito con l'utilizzare un modello T4 per generare automaticamente i miei file EDMX / Context / Model dal database (con alcuni metadati aggiuntivi). Ciò ha portato la nostra esperienza nel tempo degli sviluppatori da 1,5 minuti a circa 5 secondi.
La mia speranza è che le mappature delle stored procedure EF saranno migliorate per ottenere la parodia con EDMX e posso quindi solo generare codice per le mappature Code-First e rimuovere completamente la generazione EDMX.
Dai un'occhiata al seguente link. Ho risposto ad un'altra domanda in modo simile:
Come utilizzare il modello di repository utilizzando il primo approccio di Database nel framework di entità
Come ho menzionato in questo post, proverei personalmente a passare a un approccio Code First e ad eliminare i file EDMX poiché è già deprecato e, soprattutto, lo sforzo di manutenzione è considerevole e molto più complesso rispetto all'approccio Code First.
Non è così difficile passare a Code First da un approccio Model First. Alcuni passaggi e immagini in basso:
L'ho fatto alcune volte in passato e ha funzionato in modo impeccabile sulla produzione. Puoi anche cercare strumenti che facciano questa conversione per te.
Questa potrebbe essere una buona occasione per ripensare anche l'architettura.
BTW: Il punto 4 di Bullet non dovrebbe essere un fermo per te. È possibile mappare / utilizzare stored procedure tramite EF. Guarda il seguente link:
Come chiamare Stored Procedure in Entity Framework 6 (Code-First)?