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

时间:2020-08-23 05:30:27

标签: c# git asp.net-core .net-core entity-framework-core

运行async function* gen() { for (let i = 1; i <= 6; i++) yield i; } //const ait = gen(); (async() => { // first iteration const ait = gen() for await (const e of ait) console.log(1, e); })(); (async() => { // second... const ait = gen() for await (const é of ait) console.log(2, é); })();将在项目中产生a Migrations directory being created。此目录是否应提交版本控制(Git等)?

3 个答案:

答案 0 :(得分:2)

您始终可以使用dotnet ef migrations ...自己重新创建迁移,但这仅适用于简单的操作。 如果您要使用自定义SQL进行复杂的迁移,或者需要按特定顺序运行DDL命令,则需要将迁移文件保存在VCS中以保持该顺序。

一个示例是创建一个计算列。您需要在第一个迁移中创建表,然后在第二个迁移中使用手写SQL创建表以创建SQL函数,然后在第三个迁移中引入使用该函数的计算列。 所有这些操作都需要遵循一个命令,而不能使用简单的pip install jupyter notebook命令创建该命令

答案 1 :(得分:2)

是的,您当然应该将EFCore迁移提交到版本控制。

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

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

答案 2 :(得分:0)

绝对应该在源代码管理中提交迁移。

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

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

  1. 添加迁移
  2. 执行迁移,创建一个新表
  3. 然后删除生成的迁移代码
  4. 添加具有相同表名的新迁移
  5. 再次执行迁移

此处EF将失败,因为基础表已经存在,并且从#4创建的迁移将是“创建”语句,而不是更新语句。