Ron*_*eng 1 entity-framework entity-framework-6
现在我正在使用EF6 Alpha,并且在使用迁移时,它会将新的迁移日志添加到__MigrationHistory表中.
在EF6中,__ MigrationHistory表有一个名为"ContextKey"的新列.经过测试,我发现有两个默认的"ContextKey"值:
DbContext的派生类的全名.当我运行代码时会发生这种情况:
Database.CreateIfNotExists();
Run Code Online (Sandbox Code Playgroud)DbMigrationsConfiguration的派生类的全名.当我运行代码时会发生这种情况:
public ArticleDbContext()
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<ArticleDbContext, ArticleConfiguration>());
}
Run Code Online (Sandbox Code Playgroud)我第一次运行应用程序,"Database.CreateIfNotExists();" 为我创建一个新数据库,也是映射到ArticleDbContext中定义的模型的所有表,然后添加一个__MigrationHistory行,其中ContextKey的值为"Module.Article.Model.ArticleDbContext".
然后"Database.SetInitializer(new MigrateDatabaseToLatestVersion());" 将运行,此代码将生成一个新的ContextKey"PowerEasy.Module.Article.Migrations.ArticleConfiguration".迁移使用此ContextKey查询__MigrationHistory表并找出没有数据.因此,它将再次创建映射到ArticleDbContext中定义的模型的所有表,但这些表已经存在于数据库中,因此将抛出异常,并告诉我"表XXX已经存在".
我怎么解决这个问题?
您不应该混合迁移和Database.CreateIfNotExists方法(或在其上构建的任何初始化程序).如果数据库尚不存在,迁移将负责创建数据库.
作为Migrations初始化程序的替代方法,您还可以使用DbMigrator.Update方法应用迁移.如果要在初始化程序触发之前创建/更新数据库,这将非常有用.
| 归档时间: |
|
| 查看次数: |
3218 次 |
| 最近记录: |