我在新项目中使用EF6 Code First进行迁移。我已经在一些没有问题的项目中使用了这个。
现在这个新项目是针对现有数据库的。 我生成了标准的初始迁移文件,然后删除了所有内容,只留下了Up()和Down()方法。这在其他项目中对我有用,但不是这次。
当我从软件包管理器控制台运行update-database时,所有工作都按预期工作。
PM> update-database
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
No pending explicit migrations.
Running Seed method.
然后我从代码执行迁移(根据生产中的需要),我得到......
Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration.
我一直试图让我的头围绕这一天两天,而不是任何地方。 我甚至添加了另一个名为“stub”的迁移文件,它生成为空白。 EF没有看到我的模型有任何变化(没有变化),所以它没有任何生成。然而,通过代码进行的迁移执行仍然存在待迁移迁移的错误。
我已经将一个记录器附加到迁移的代码执行中,输出就是这个。
Target database is: 'FMS' (DataSource: (local)\SQL2012, Provider: System.Data.SqlClient, Origin: Configuration).
No pending explicit migrations.
然后我在浏览器中收到错误消息。
我的配置类
namespace FMS.Infrastructure.Repository.EF.Migrations.Stage
{
public sealed class StageConfiguration : DbMigrationsConfiguration<StageDb>
{
public StageConfiguration()
{
AutomaticMigrationsEnabled = false;
MigrationsDirectory = @"Migrations\Stage";
CommandTimeout = 3000;
ContextKey = "FMS.Stage";
}
}
}
执行迁移的代码
Database.SetInitializer(new MigrateDatabaseToLatestVersion<StageDb, StageConfiguration>());
var dbMigrator = new DbMigrator(new StageConfiguration());
var logger = new MigratorLoggingDecorator(dbMigrator, new DbMigrationLogger());
foreach (string migration in dbMigrator.GetPendingMigrations())
Console.WriteLine(migration);
logger.Update();
我希望这对那些愿意尝试帮助的人来说已经足够清楚了。如果有人有小费,我都是耳朵。这让我变得灰暗。