EF 7迁移到现有数据库

Xer*_*eat 6 ef-migrations entity-framework-core asp.net5

我正在使用ASP.Net 5和EF7开发一个Web项目.

我已将现有数据库中的所有表导入到项目中的模型中.但是,我在迁移方面遇到了问题.

我创建了初始迁移,对特定实体进行了一些更改,根据我所做的更改创建了另一个迁移,现在想要在数据库上应用更改.

运行以下命令后:

dnx ef database update [Migration]

dnx试图对已经在数据库中的所有实体应用"初始"迁移,这会导致如下错误:

{数据库中已经有一个名为['EntityName']的对象.}

您能否就如何在现有数据库上进行迁移提出建议?

谢谢赛义德

Ste*_*ene 7

在EF6中,您将使用该-IgnoreChanges标志运行迁移,它将在没有任何Up()代码的情况下拍摄模型的快照.如此处所示,EF 7(EF Core)缺少此功能.

现在的解决方法是从Up()迁移代码中删除或注释掉现有数据库对象的代码,然后更新数据库.然后,后续迁移将仅包括更改.


Ali*_*efi 5

2天后,我发现EFCore的方法不在Google和Internet中!

我的步骤如何运作?

当您有一个包含10个表的数据库并且您在大数据中有您不想清除的数据时。在此之后,您将首先在代码中创建新模型并运行到现有数据库,并且会收到错误消息“无效的对象名称“ tableName”。” 查询新表,您想创建迁移并确实将其更新到现有数据库,但是如果您运行update-database,则首次迁移将创建旧表和新表的所有查询,您将获得“已经有一个名为['EntityName'的对象])。” 用于您的初始迁移。

如何解决?

  1. 删除数据库项目中的所有迁移和快照
  2. 删除现有数据库中的__EFMigrationsHistory表(如果存在)
  3. 在程序包管理器控制台中运行:

运行前注意:此代码将在Data文件夹中创建现有数据库的新上下文和模型,因此不要忘记检查项目中是否没有Data文件夹。

Scaffold-DbContext“您的连接字符串” Microsoft.EntityFrameworkCore.SqlServer -OutputDir数据

  1. 在程序包管理器控制台中运行:

运行前注意:使用Data文件夹上下文为初始数据库创建第一次迁移(OldDataBaseContext在步骤2创建的Data文件夹内部)

Add-Migration初始-Context OldDataBaseContext

  1. 删除步骤3中创建的初始迁移内部的Up方法中的所有代码
  2. 在程序包管理器控制台中运行:

运行前注意:使用Data文件夹上下文更新数据库(OldDataBaseContext在步骤2创建的Data文件夹内部)

更新数据库的上下文OldDataBaseContext

  1. 删除在步骤2中创建的数据文件夹
  2. 转到快照和初始迁移类,然后将已删除的上下文从“数据”文件夹更改为数据库项目中存在的主上下文(只需对其进行修复以进行构建)
  3. 跑:

运行前注意:为具有新数据库更改的主上下文添加迁移

添加迁移newUpdate

  1. 跑:

更新数据库

希望对您有所帮助。