映射到现有数据库列

时间:2014-12-12 16:33:22

标签: c# entity-framework

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

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

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

2 个答案:

答案 0 :(得分:4)

根据上述评论,我知道你可以做些什么来解决这个问题:

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

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

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

  4. 最后,使用MigrateDatabaseToLatestVersion初始值设定项运行您的应用。在那之后你不应该看到任何错误。

  5. 我之前遇到过同样的问题,这一直是我解决的问题。我不知道为什么微软会以这种方式工作,但这就是我猜想饼干崩溃的方式。

答案 1 :(得分:1)

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

  

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

当我运行“添加迁移”时,新的迁移文件只添加了一些 ALREADY EXISTING列,因此下一次Update-Database失败,因为我正在尝试添加已存在的列。

那对我有什么帮助:

  1. 运行add-migration
  2. 在新生成的文件中删除UpDown方法的内容(或只是导致问题的行)