在Entity Framework Core中,使用InvariantGlobalization和不使用它有什么区别?

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

我有一个使用 Entity Framework Core 存储库的 ASP.NET Core 应用程序。

我的实际版本是 Entity Framework Core 7,我已在 ASP.NET Core 项目的

.csproj
文件中设置,该选项
InvariantGlobalization
为 false。

现在,我正在尝试迁移到 .NET 8,现在,当我在 Entity Framework Core 中运行查询时,出现此错误:

全球化不变模式仅支持不变文化。有关更多信息,请参阅 https://aka.ms/GlobalizationInvariantMode。 (参数“名称”)
en-us 是无效的区域性标识符。

如果我在 ASP.NET Core 项目中将参数

InvariantGlobalization
设置为 true,那么它就可以工作。

我的安装是西班牙文化,根据错误看来,它与en-us文化有关。

参数设置为true和false有什么区别?为什么它适用于 .NET 7 而现在适用于 .NET 8 我必须更改此值?它如何影响应用程序的行为?

谢谢。

c# entity-framework-core
1个回答
0
投票

ASP.NET Core 项目的 .csproj 文件中的 InvariantGlobalization 参数控制文化和区域设置的全局回退行为。当 InvariantGlobalization 设置为 false 时,应用程序将使用操作系统的默认区域性和区域设置。当它设置为 true 时,应用程序使用不变区域性,这是一种独立于区域性的表示形式,不会根据系统的区域设置而改变。

在您的情况下,当您在 .NET 7 应用程序中将 InvariantGlobalization 设置为 false 时,它允许应用程序使用西班牙语安装的默认区域性和区域设置。然而,在 .NET 8 中,似乎对所使用的区域性标识符进行了更严格的验证,并且它将“en-us”标记为无效的区域性标识符,因为它与系统的默认区域性不匹配。

通过将 InvariantGlobalization 设置为 true,可以强制使用不变区域性,从而避免对系统区域性设置的任何依赖。这有助于确保不同环境中的行为一致,并防止与特定文化的格式或行为相关的问题。

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