我已通过Nuget将EF 5添加到我的项目中,并使用“Enable-Migrations”命令启用了迁移。然后,我调用“Add-Migration”生成了生成模式基础代码。
接下来,我向我的一个域对象添加了一个属性(名为“TestProperty”的字符串属性),并向我的EntityTypeConfiguration文件添加了一个映射(目前忽略约定)。
再次调用“Add-Migration”会产生错误:
Unable to generate an explicit migration because the following explicit migrations are pending: [201303262144218_Initial]. Apply the pending explicit migrations before attempting to generate a new explicit migration.
但是调用“Update-Database”会引发 SQL 异常,因为表已经存在:
There is already an object named 'Customer' in the database
在我的 DbContext 构造函数中,我尝试了不同的更新策略,例如:
Database.SetInitializer<UnitOfWork>(new DropCreateDatabaseAlways<UnitOfWork>());
我是否漏掉了一些明显的东西? 我尝试了这里的解决方案,但它没有起作用:ASP.NET自动迁移
谢谢
编辑:更新 跨过第一步的关键是创建初始迁移,然后从Up和Down方法中删除生成的代码(http://thedatafarm.com/blog/data-access/using-ef-migrations-with-an-existing-database/)。
然后,我可以更新模型和EF映射,然后运行Add-Migration。这将生成一个具有正确Up和Down代码的迁移。
问题是尝试应用更新时出现错误。Update-Database产生错误“无法更新数据库以匹配当前模型,因为存在挂起的更改并且已禁用自动迁移...自动迁移。将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true即可启用自动迁移。 您可以使用Add-Migration命令将待处理的模型更改编写为基于代码的迁移”。好的,所以我再次尝试Add-Migration,它会生成另一个与上一个完全相同的迁移。
我运行Update-Database,再次获得相同的错误。我尝试“Update-Database -TargetMigration 201304080859556_MyMigration -Force”,但这会产生“指定的目标迁移'201304080859556_MyMigration'不存在,请确保目标迁移引用现有的迁移id”-它存在!
非常令人沮丧!