2012-03-15 11 views
6

Tengo un problema que causa pérdida de cabello ...Cómo detener EF (código primero) Comprobación de cambios de esquema

Tengo una compilación de proyecto con Code First (EF); todo está bien y funciona como un encanto, sin embargo, no puedo encontrar una forma adecuada de permitir cambios en la Base de datos (mediante scripts .sql) sin que la aplicación genere una rabieta en el inicio porque el esquema ha cambiado.

He leído y leído este problema, he eliminado la tabla EdmMetaData para que no pueda comparar el hash de la base de datos pero luego haya leído un error con la EF en cuanto a que si se elimina, sigue creyendo que el esquema ha cambiado (¡ya que no reconoce la tabla que falta, por lo que compara una cadena vacía!).

Además, he intentado utilizar Database.SetInializer (null) en el archivo Global.asax pero esto significa que no puedo acceder al modelo de datos más adelante.

Todo el mundo habla sobre el uso de la opción de abandonar la base de datos si los cambios en el esquema etc.

Esto es lo que estoy buscando:

Para el/Primer Código EF para hacer ... NADA! Dulce FA! ¡Nada!

... Si cambio el esquema a través de una aplicación externa, quiero que ignore los cambios por completo y simplemente ASUMA que he realizado los cambios relevantes del modelo para trabajar con estos cambios de base de datos, realizados mediante el script .sql. Si omito una columna o una tabla, entonces acepto mi estupidez y espero una rabieta, pero, hasta que cometa un error, quiero que el EF confíe en mí.

Esto significa que puedo actualizar fácilmente cualquiera de nuestros clientes con un script .sql, en cualquier momento y ¡no preocuparme por las tetas de EF going up! :(

cualquier idea chicos ??

+0

Explique qué sucede si establece el inicializador de la base de datos como nulo. –

Respuesta

5

Además de establecer inicializador a null añadir también esto a su clase de contexto:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 

    model.Conventions.Remove<IncludeMetadataConvention>(); 
} 

Se apagará la comparación de hash

7

Con más. En versiones recientes de Entity Framework, ya no es necesario que haga lo que dice Ladislav Mrnka. Desde EF 4.3, solo necesita configurar el inicializador para que el WebContext sea nulo. Por ejemplo:

Database.SetInitializer<FabrikamFiberWebContext>(null); 
Cuestiones relacionadas