EFCore 迁移是否应该致力于版本控制?

问题描述 投票:0回答:3

运行

dotnet ef migrations add XYZ
将导致在项目中创建一个 Migrations 目录。该目录是否应该提交版本控制(Git 等)?

c# git asp.net-core .net-core entity-framework-core
3个回答
17
投票
是的,您应该将 EFCore 迁移提交到版本控制。


当引入数据模型更改时,EF Core 会将当前模型与旧模型的快照进行比较以确定差异,并生成迁移源文件;这些文件可以像任何其他源文件一样在项目的源代码管理中进行跟踪。


让我们假设您没有将迁移提交给版本控制。一段时间后,您或您的团队成员对数据模型进行更改,EFCore 将无法获取最后一个快照,因此更新数据库可能会导致一些可能已经存在的冲突/更改..!


2
投票
您始终可以使用

dotnet ef migrations add <name>

 自己重新创建迁移,但这仅适用于简单的操作。
如果您有使用自定义 SQL 的复杂迁移,或需要按特定顺序运行的 DDL 命令,那么您需要将迁移文件保留在 VCS 中以保留该顺序。

一个示例是创建计算列。您需要使用第一次迁移创建表,然后使用手写 SQL 创建另一个表,以在第二次迁移中创建 SQL 函数,然后进行第三次迁移以引入使用该函数的计算列。 所有这些操作都需要遵循命令,无法通过简单的

dotnet ef migrations ...

 命令
创建


0
投票
迁移绝对应该在源代码控制中提交。

删除迁移将使 EF 无法为现有数据库的未来更改生成未来迁移。

此外,如果您执行以下操作...

    添加迁移
  1. 执行迁移,创建新表
  2. 然后删除生成的迁移代码
  3. 添加具有相同表名的新迁移
  4. 再次执行迁移
此处 EF 将失败,因为基础表已存在,并且从 #4 创建的迁移将是“create”语句而不是更新语句。

© www.soinside.com 2019 - 2024. All rights reserved.