我已通过 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-与现有数据库/)。
然后我可以更新模型和 EF 映射,然后运行 Add-Migration。这会使用正确的 Up 和 Down 代码生成迁移。
然后问题是尝试应用更新。Update-Database 产生错误“无法更新数据库以匹配当前模型,因为存在待处理的更改并且自动迁移被禁用...自动迁移。将 DbMigrationsConfiguration.AutomaticMigrationsEnabled 设置为 true 以启用自动迁移。您可以使用 Add-Migration命令将挂起的模型更改写入基于代码的迁移”。好的,所以我再次尝试添加迁移,它会生成另一个迁移,其代码与上一个迁移完全相同。
我运行 Update-Database 并再次得到相同的错误。我尝试“Update-Database -TargetMigration 201304080859556_MyMigration -Force”,但这会产生“指定的目标迁移 '201304080859556_MyMigration' 不存在。确保目标迁移指的是现有的迁移 id” - 它确实存在!
非常令人沮丧!