Entity Framework 6 Code First Migration's ContextKey

entity-framework entity-framework-6

Pregunta

Ahora estoy usando EF6 Alpha, y cuando use la migración, agregará un nuevo registro de migración en la tabla __MigrationHistory.

En EF6, la tabla __MigrationHistory tiene una nueva columna llamada "ContextKey". Después de la prueba, encontré que hay dos valores predeterminados de "ContextKey":

  1. El nombre completo de la clase derivada de DbContext. Esto sucede cuando ejecuto el código:

    Database.CreateIfNotExists();
    
  2. El nombre completo de la clase derivada de DbMigrationsConfiguration. Esto sucede cuando ejecuto el código:

    Database.CreateIfNotExists();
    

La primera vez que ejecuté la aplicación, "Database.CreateIfNotExists ();" cree una nueva base de datos para mí, también todas las tablas que se asignan a los modelos definidos en ArticleDbContext, y luego agregue una fila __MigrationHistory cuyo valor de ContextKey sea "Module.Article.Model.ArticleDbContext".

Y luego "Database.SetInitializer (new MigrateDatabaseToLatestVersion ());" se ejecutará, este código generará una nueva ContextKey "PowerEasy.Module.Article.Migrations.ArticleConfiguration". La migración consulta la tabla __MigrationHistory con esta ContextKey y descubre que no hay datos. Así que de nuevo, creará todas las tablas que se asignan a los modelos definidos en ArticleDbContext, pero las tablas ya existen en la base de datos, por lo que se lanzará una excepción y me dirá "la tabla XXX ya existe".

Como puedo resolver esto?

Respuesta aceptada

No debe mezclar las Migraciones y el método Database.CreateIfNotExists (o cualquiera de los inicializadores construidos sobre él). Las migraciones se encargarán de crear la base de datos si aún no existe.

Como alternativa al inicializador de Migraciones, también puede aplicar migraciones usando el método DbMigrator.Update . Esto es útil si desea crear / actualizar la base de datos antes de que el inicializador la active.




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué