我已经通过 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>());
我错过了一些明显的东西吗?
我在这里尝试了解决方案,但没有奏效:Automatic Migrations for ASP.NET
谢谢
编辑:更新
通过第一步的关键是创建初始迁移,然后从 Up 和 Down 方法中删除生成的代码 ( http://thedatafarm.com/blog/data-access/using-ef-migrations-with-an-existing-database/ )。
然后我可以更新模型和 EF 映射,然后运行 Add-Migration。这将生成具有正确 Up 和 Down 代码的迁移。
然后问题是尝试应用更新。更新数据库产生错误“无法更新数据库以匹配当前模型,因为存在挂起的更改并且自动迁移被禁用...自动迁移。将 DbMigrationsConfiguration.AutomaticMigrationsEnabled 设置为 true 以启用自动迁移。
您可以使用 Add-Migration 命令将挂起的模型更改写入基于代码的迁移”。好的,所以我再次尝试 Add-Migration,它生成另一个迁移,其代码与上一个完全相同。
我运行 Update-Database 并再次收到相同的错误。我尝试“Update-Database -TargetMigration 201304080859556_MyMigration -Force”,但这会产生“指定的目标迁移‘201304080859556_MyMigration’不存在。确保目标迁移是指现有的迁移ID”-确实如此!
非常令人沮丧!
最佳答案
我在为具有现有数据库的代码优先模型启用 EF 迁移时遇到了同样的问题,并且以下过程有效:
__MigrationHistory
从现有的数据库。 enable-migrations
来自包管理器控制台的命令。 add-migration
命令来创建初始迁移。 Up()
中的所有代码初始迁移的方法。 update-database
命令将初始迁移应用到您的数据库。这不会对现有对象进行任何更改(因为
Up()
方法不包含代码),但会将现有数据库标记为已迁移到初始状态。 add-migration
命令来创建一个新的迁移。Up()
中的代码新迁移的方法将仅包含对您的对象模型的更改。 update-database
命令将更改应用到您的数据库。 关于entity-framework - Entity Framework 代码迁移 - 停留在初始迁移上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15654441/