【问题标题】:Mapping to an already existing database column映射到已经存在的数据库列
【发布时间】:2014-12-12 16:33:21
【问题描述】:

我们有一个使用 Entity Framework 6.0 创建的应用程序,并使用 Code First 来创建我们的数据库模式。 DBA 在已经存在的表上创建了一个生产中的新列,并希望我们映射到它。

查看Entity Framework 4.1 code first mapping to already existing database table,我看到提到使用Ignore,但我们希望该字段被映射;我们只是不想创建它。

最坏的情况是,我们会让 DBA 将列值复制到一个新的临时列中,首先以传统方式使用代码创建它,然后再将其复制回来。不过,如果可能的话,我们宁愿让代码先处理它。理想情况下,如果它不存在,它会在 dev/test/uat 环境中创建该列,但不会在生产中将其删除。

【问题讨论】:

  • 你在使用迁移吗?
  • 是的,我们正在使用 MigrateDatabaseToLatestVersion 初始化程序。
  • 酷。我假设您每次运行应用程序时也会看到一个错误,说它无法创建列,因为它已经存在?
  • 是的,每次我们尝试运行应用程序时都会发生这种情况。收到一个错误,表明它无法创建列,因为它已经存在。

标签: c# entity-framework


【解决方案1】:

基于上面的cmets,我知道你可以做些什么来解决这个问题:

  1. 确保您的 POCO 具有已添加到表中的列

  2. 转到 NuGet 的包管理器控制台并运行 add-migration。这将生成一个手动迁移文件,其中将包括它检测到的需要对数据库进行的一些更改。

  3. 删除 UpDown 方法中的所有内容。只需为它们留下签名和一个空方法即可。

  4. 最后,使用 MigrateDatabaseToLatestVersion 初始化程序运行您的应用程序。之后您应该不会看到任何错误。

我以前也遇到过同样的问题,现在一直解决。我不知道微软为什么要这样工作,但我猜这就是 cookie 崩溃的方式。

【讨论】:

  • 听起来不错的建议。我会尽快试一试,然后告诉你进展如何。
【解决方案2】:

我遇到了同样的问题 - 在空数据库(或尚未创建的数据库)上添加迁移后,EF 通知我模型中有一些更改,因此我应该运行添加迁移。

无法更新数据库以匹配当前模型,因为存在待处理的更改并且自动迁移已禁用。

当我运行“add-migration”时,新的迁移文件只会添加一些 ALREADY EXISTING 列,因此下一个 Update-Database 因我尝试添加列的错误而失败,该列已经存在。

那么对我有什么帮助:

  1. 运行添加迁移
  2. 在新生成的文件中删除 UpDown 方法的内容(或仅删除导致问题的行)

【讨论】:

    猜你喜欢
    • 2012-02-09
    • 2016-02-13
    • 2011-02-14
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    相关资源
    最近更新 更多