EF Core迁移

时间:2017-08-17 14:30:06

标签: .net-core entity-framework-core ef-migrations

我正在尝试将迁移用于现有数据库并创建一个新数据库(如果不存在)。

EF Core文件说:

  

如果在数据库已存在时创建了初始迁移,则会生成数据库创建代码,但由于数据库已与数据模型匹配,因此无需运行。将应用程序部署到数据库尚不存在的另一个环境时,此代码将运行以创建数据库

From EFCore docs

我做了初始迁移,它创建了一个上下方法来创建我的表。当我将它运行到新数据库(连接字符串中的新数据库名称)时,它会按预期创建数据库和表。

但是,如果我将其运行到现有数据库(不是由迁移创建),则会在第一个尝试创建已存在的表的up方法失败,并且迁移将停止运行。

文档说"它不必运行",但迁移的第一件事是尝试创建现有表。

如何防止迁移尝试创建现有表?有一些像"如果不存在则创造"内置于迁移?文件是对的吗?它应该按照预期/描述在文档中工作吗?

如果我做错了,那么使用现有数据库和新数据库运行迁移的策略是什么?

Dotnet核心版:1.1。 EFCore版本:1.1.2。

提前致谢。

1 个答案:

答案 0 :(得分:4)

您需要为现有数据库进行基线迁移。在EF 6中,您使用了-IgnoreChanges标志,但现在Core中不存在。见here

您可以通过注释掉所有Up()代码并应用该迁移来完成EF Core中的相同操作。这将创建__MigrationHistory表并插入表示已应用的记录。

后续迁移将应用于两者,如果您需要创建新数据库,则可以覆盖。