2012-01-26 21 views
6

estoy probando con EF 4.3 (beta)Cómo ignorar una tabla/clase de EF 4.3 migraciones

Tengo algunas nuevas clases que debería generar tablas db y columnas.

De un proyecto antiguo, tengo algunas tablas antiguas en mi esquema, a las que quiero acceder a través de EF. Todas las clases están declaradas. Para acceder a la tabla anterior, hay un poco que está mapeado.

Las migraciones db también intentan crear esa tabla anterior.

¿Cómo se puede establecer que esta clase/tabla no sea parte de la migración, sino parte del modelo ef?

xxx.OnModelCreating()  
{ 
    modelBuilder.Ignore<myOldTableClass>();  
} 

elimina la clase completa del modelo. finalmente no puedo usarlo para acceder a través de dbContext.

me gusta usar migraciones automáticas. intento evitar migrar tablas db antiguas por completo a las clases EF. (Sí, sé que hay generadores para eso) hay 120 tablas, que aún son utilizadas por aplicaciones antiguas.

algunas tablas nuevas que solo se utilizan con EF (nueva aplicación). hay 3 tablas usadas comunes. los que no deberían crearse pero se accede a través de ef.

Respuesta

21

Con EF 4.3.1 liberados no se construye en apoyo a este escenario. Al agregar clases asignadas a tablas existentes en la base de datos, use el interruptor -IngoreChanges al Add-Migration.

Esto generará una migración vacía, con una firma de metadatos actualizada que contiene las clases recién agregadas.

Por lo general, esto se hace cuando se inicia el uso de EF migraciones, de ahí el nombre "InitialMigration":

Add-Migration InitialMigration –IgnoreChanges 
+0

esto es genial, funcionó para mí. –

+0

No entiendo de esta respuesta cómo especificar el nombre de clase para ignorar. –

+0

No sé cómo funcionaría esto cuando solo queremos ignorar una tabla específica (es decir, una tabla existente para omitir la migración). modelBuilder.Ignore (); no tiene sentido porque queremos la unión. – Spock

3

El flujo de trabajo correcto en este caso es crear la primera migración antes de agregar cambios (nuevas clases), que agregar nuevas clases y luego crear una nueva migración en la que solo tendrá tablas nuevas.

Si no usó migraciones hasta ahora, el marco generará migraciones para todas las tablas que tenga en el proyecto porque cree que está creando una migración inicial. Una vez que haya generado la migración, puede modificar su archivo fuente y eliminar el código CreateTable para las clases antiguas del método Up. El problema es que probablemente deba hacer esto en cualquier migración posterior.

Editar: me escribió una walkthrough para añadir a las migraciones proyecto existente con EF 4.3.1

+0

Las tablas se incluirían en los metadatos para que la migración, para que no reaparecerá en migraciones posteriores. –

+1

@AndersAbel: Sí. Es verdad. Corregí mi respuesta. –

+0

¿Funcionaría esto con AutomaticMigrationEnabled = true? – Spock

Cuestiones relacionadas