【问题标题】:"dotnet ef migrations add" replaces \r\n with \n when calling on mac/linux在 mac/linux 上调用时,“dotnet ef migrations add”将 \r\n 替换为 \n
【发布时间】:2022-01-08 00:44:05
【问题描述】:

我在使用 dotnet ef cli 工具创建新迁移时遇到了一个可重复的问题。我与主要使用 Windows 的开发人员一起从事一个项目,而我在 MacOS 和 Linux 上工作没有重大问题。 我们使用 .HasData() 方法进行了流利的实体配置和一些数据播种

 builder.HasData(new SomeType
        {
            NameEn = @"multi
                        line string"
        });

然后在 Windows 上创建迁移时,它会为每次遇到新行时生成带有“\r\n”的迁移文件,但是当在 mac/linux 系统上创建任何迁移时,它会将其捕获为更改并生成 migrationBuilder。带有“\r\n”的 UpdateData 条目被替换为“\n”。在下次迁移的窗口上,它再次被捕获并转换回“\r\n”。

成功地将迁移应用到数据库没有任何区别,但它成功地混淆了 git diff 结果并使其更难审查。不必要的更新我不需要提及...

有人遇到过这样的问题吗?有什么解决办法吗?我找不到任何报告的问题,而且在我看来,团队中的人在不同系统上工作的情况并不罕见。

我使用“Entity Framework Core .NET 命令行工具 6.0.0”

提前感谢您的帮助

【问题讨论】:

  • 是“迁移”改变了行尾,还是源代码控制 (git) 将行尾调整为当前平台?

标签: .net entity-framework-core dotnet-cli


【解决方案1】:

最近也遇到了这个问题,不知道为什么它不是文档中列出的重大更改。据我们所知,EF Core 现在正在根据迁移时的本机文件系统将行结尾添加到种子数据中的多行字符串中。正如您所发现的,这会在多环境团队中造成乒乓球情况,因为 git 会规范您工作目录中的行尾。

升级到 EF Core 6 时,无论如何,您很可能会在第一次迁移时对快照进行大量更改,因为迁移将包含带有行尾的字符串。但是您可以通过以下方式避免持续来回以及迁移中的实际 UpdateData 调用:

  • .gitattributes 文件强制种子数据字符串所在的文件遵守 CRLF 或 LF 设置,无论环境如何。 Read more here.

    • 您可以使用git ls-files --eol 左列结果来确定文件的行尾,因为它们已经签入,因此您知道选择哪个最容易。
  • 如果您要从文件中引入数据,或者以其他方式读取它,请手动将特定的行尾作为读取的一部分放入字符串中。您也可以在数据文件上使用 .gitattributes 方法,以便行尾保持一致。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 2013-03-22
    • 2022-08-22
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多