entity-framework - Entity Framework 代码迁移 - 停留在初始迁移上

标签 entity-framework ef-code-first entity-framework-5 code-migration

我已经通过 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 迁移时遇到了同样的问题,并且以下过程有效:

  • 删除项目中现有的 Migrations 文件夹,然后删除表 __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/

    相关文章:

    c# - 通过带有异步的 Entity Framework 运行存储过程是否会忽略 context.timeout

    entity-framework - 使 byte[] 属性延迟加载

    ef-code-first - 非静态方法需要一个目标。 Entity Framework 5 代码优先

    c# - 如何建模自引用对象类型?

    c# - 为什么 Entity Framework 有 AddAsync?

    c# - Entity Framework 多列

    c# - 获取实体的列名

    sql - Entity Framework 4 Code First 出现数据库使用错误

    c# - 我可以使用 Entity Framework Code First 指定子实体默认排序吗?

    entity-framework-5 - 如何将 ObjectContext 与模型生成器一起使用?