2012-05-16 15 views
38

Sto lavorando con EF 4.3 e ho un contesto che ha bisogno di parlare con un database che è stato generato da un'altra libreria usando EF Code First 4.3. Il contesto sta generando un'eccezioneCome disabilitare la verifica della compatibilità del modello in Entity Framework 4.3?

Il modello che supportava il contesto "Contesto" è stato modificato da quando è stato creato il database . Considerare l'utilizzo di codice prime migrazioni di aggiornare il database

In EF 4.1 questo potrebbe essere diabled rimuovendo il IncludeMetadataConvention dal ModelBuilder. Tuttavia, in 4.3 questa convenzione è stata deprecata e non ha più effetto.

Come si può avere un colloquio EF 4.3 su un database generato da EF 4.3 creato da un contesto diverso? L'unica opzione che ho trovato (che è tutt'altro che ideale) è quella di eliminare la tabella dei metadati, causando in tal modo entrambi i contesti per presupporre che il database non sia stato creato da EF.

PS: So che questo scenario è probabile che sollevare questioni circa perché ho bisogno di fare questo; So che è tutt'altro che ideale, ma ti assicuro che è un problema che devo risolvere e che ho opzioni limitate per lavorare lateralmente.

risposta

67

L'impostazione dell'inizializzatore su null salterà il controllo di compatibilità del modello.

Database.SetInitializer<MyContext>(null); 
+2

Perfetto, funziona esattamente come speravo. Grazie! – STW

+1

Dove lo metti? – jep

+4

Un costruttore statico sul tuo contesto sembra funzionare piuttosto bene per la maggior parte delle applicazioni. – bricelam

15

Per EF 4.3 o superiore

Database.SetInitializer<MLTServerWatcherContext>(null); 

Oppure, se utilizza la versione precedente di EF

modelBuilder.Conventions.Remove<IncludeMetadataConvention>(); 

(So che ha detto che stanno utilizzando EF 4.3, ma penso che è bene mostra anche questa opzione)

Problemi correlati