【发布时间】:2013-03-17 06:34:17
【问题描述】:
我已通过 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 代码生成迁移。
然后问题是尝试应用更新。 Update-Database 产生错误“无法更新数据库以匹配当前模型,因为存在待处理的更改并且自动迁移被禁用...自动迁移。将 DbMigrationsConfiguration.AutomaticMigrationsEnabled 设置为 true 以启用自动迁移。 您可以使用 Add-Migration 命令将挂起的模型更改写入基于代码的迁移”。好的,所以我再次尝试 Add-Migration,它会生成另一个迁移,其代码与上次迁移完全相同。
我运行 Update-Database 并再次遇到相同的错误。我尝试“Update-Database -TargetMigration 201304080859556_MyMigration -Force”,但这会产生“指定的目标迁移 '201304080859556_MyMigration' 不存在。确保目标迁移引用现有的迁移 id” - 确实如此!
非常沮丧!
【问题讨论】:
-
您的 Migrations 目录中是否有一个名为 201303262144218_Initial.cs 的现有文件?
-
是的。我有点困惑 - 初始迁移应该是空白还是应该在其初始状态下创建数据库?另外,我没有 __MigrationHistory 表(在我的数据库或主数据库中)
-
Initial 只是该特定迁移的名称。有时人们称他们的第一次迁移为首字母。如果您有一个现有的数据库,并运行 add-migration/update-database 命令而不对模型类进行任何更改,则迁移文件将为空。删除文件 201303262144218_Initial.cs,然后再次运行这两个命令('add-migration latestMigration' then 'update-database'。
标签: entity-framework ef-code-first entity-framework-5 code-migration