我已经通过Nuget将EF 5添加到我的项目中,并通过“Enable-Migrations”命令启用了迁移。然后我称之为“添加迁移”来生成用于生成模式的基本代码。实体框架代码迁移 - 卡在初始迁移
然后,我添加了一个属性到我的一个域对象(字符串属性名为“TestProperty”),并添加了一个映射到我的EntityTypeConfiguration文件(我们现在忽略了这些约定)。
调用“添加迁移”再次产生错误:
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.
但调用“更新-数据库”产生SQL异常,因为表已经存在:
There is already an object named 'Customer' in the database
在我的构造函数我的DbContext我尝试了不同的更新策略,例如:
Database.SetInitializer<UnitOfWork>(new DropCreateDatabaseAlways<UnitOfWork>());
我是密西西比州显而易见的东西? 我在这里尝试了解决方案,但它没有工作:Automatic Migrations for ASP.NET
感谢
编辑:更新 ,这是让过去的第一步,关键是要创建初始迁移,然后从上删除生成的代码和Down方法(http://thedatafarm.com/blog/data-access/using-ef-migrations-with-an-existing-database/)。
我可以更新模型和EF映射,然后运行Add-Migration。这会生成正确的向上和向下代码的迁移。
然后问题是试图应用更新。 Update-Database产生错误“无法更新数据库以匹配当前模型,因为有未决的更改并且自动迁移已禁用...自动迁移。将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移 可以使用Add-迁移命令将挂起的模型更改写入基于代码的迁移“。好的,所以我再次尝试添加迁移,并且使用与最后一个完全相同的代码生成另一个迁移。
我运行Update-Database并再次得到相同的错误。我尝试“更新数据库-TargetMigration 201304080859556_MyMigration -Force”,但这会产生“指定的目标迁移”201304080859556_MyMigration“不存在。确保目标迁移指的是现有的迁移标识” - 它确实!
很沮丧!
您的Migrations目录中是否存在名为201303262144218_Initial.cs的现有文件? – MattSull 2013-03-27 23:04:19
是的。我有点困惑 - 最初的迁移应该是空白的,还是应该在初始状态下创建数据库?另外,我没有__MigrationHistory表(在我的数据库或Master中) – SturmUndDrang 2013-04-05 11:13:49
Initial只是给出特定迁移的名称。有时候人们称他们的第一次迁移为初始如果你有一个现有的数据库,并运行add-migration/update-database命令而不对模型类进行任何修改,那么迁移文件将是空的。删除文件201303262144218_Initial.cs,然后再次运行这两个命令('add-migration newestMigration',然后'update-database'。 – MattSull 2013-04-05 11:45:44