现在我使用的是 EF6 Alpha,当使用迁移时,它会在 __MigrationHistory 表中添加一个新的迁移日志。
在 EF6 中,__MigrationHistory 表有一个名为“ContextKey”的新列。经过测试,我发现有两个默认的“ContextKey”值:
DbContext 的派生类的全名。当我运行代码时会发生这种情况:
Database.CreateIfNotExists();
DbMigrationsConfiguration 的派生类的全名。当我运行代码时会发生这种情况:
public ArticleDbContext() { Database.SetInitializer(new MigrateDatabaseToLatestVersion<ArticleDbContext, ArticleConfiguration>()); }
我第一次运行应用程序时,“Database.CreateIfNotExists();” 为我创建一个新数据库,以及映射到 ArticleDbContext 中定义的模型的所有表,然后添加一个 __MigrationHistory 行,其中 ContextKey 的值为“Module.Article.Model.ArticleDbContext”。
然后是“Database.SetInitializer(new MigrateDatabaseToLatestVersion());” 将运行,此代码将生成一个新的 ContextKey“PowerEasy.Module.Article.Migrations.ArticleConfiguration”。迁移用这个 ContextKey 查询 __MigrationHistory 表,发现没有数据。所以它会再次创建映射到ArticleDbContext中定义的模型的所有表,但是这些表已经存在于数据库中,所以会抛出异常,并告诉我“表XXX已经存在”。
我该如何解决这个问题?