15

Come disattivare funzionalità di code-primo di EF (Visual Studio 2012)Come disattivare funzionalità di code-primo di EF (MVC4 Visual Studio 2012)

Sto usando Visual Studio 2012, MVC4 (modello di applicazione Internet).

Desidero utilizzare EF, ma non con la sua funzione code-first. Vorrei che l'applicazione eseguisse l'errore, piuttosto che creare o modificare il mio database in base al mio codice. (Non riesco a vivere con questa sensazione che il mio database venga modificato dietro le quinte ... voglio che l'applicazione utilizzi l'esatto db che ho creato ... e se c'è qualcosa che deve essere cambiato, lo farò fai da solo)

questo è possibile con il nuovo Ef (VS2012)?

ho visto molte persone chiedere questo, ma finora non riesco a trovare la risposta.

risposta

23

È possibile utilizzare codice prima e assicurarsi che il database non viene aggiornato o sovrascritto quando si cambia il vostro modello impostando l'inizializzatore database per null:

Database.SetInitializer<MyDbContext>(null); 

Si tratta di un metodo statico della classe Database e dovrebbe essere chiamato all'inizio dell'applicazione, ad esempio in global.asax o in un costruttore statico della classe di contesto. In questo modo è necessario modificare manualmente la classe del modello e lo schema del database in modo che corrispondano.

È anche possibile utilizzare la funzione Reverse Engineer per creare un modello Code First da un database esistente. Si è spiegato qui: http://msdn.microsoft.com/en-us/data/jj200620

Oppure, se non si desidera utilizzare codice Prima a tutti e lavorare con un modello di design è possibile utilizzare il database Primo approccio, spiegato qui: http://msdn.microsoft.com/en-us/data/jj206878

Una panoramica su tutti i le opzioni possibili sono qui: http://msdn.microsoft.com/en-us/data/ee712907.aspx

+1

grazie! Stavo impazzendo a guardare attraverso una soluzione esistente cercando di capire perché Code First non funzionava. E dopo questo post trovo questo pezzo di codice nel global.asax.cs -> Database.SetInitializer (null); – shake

+0

Quindi ecco cosa non capisco: nel mio controller, ho un campo privato contenente il contesto. Questo campo viene inizializzato tramite il costruttore senza parametri, che contiene la riga sopra. Successivamente, vengo indirizzato a un metodo controller, che si arresta in modo anomalo quando EF tenta di rilasciare il database. Come può essere? È collegato a me chiamando il super-costruttore per il contesto, con il nome della mia classe Context come parametro di stringa. –

Problemi correlati