- У меня есть локальный компьютер с локалью:
en-US
- У меня есть сборочный компьютер с локалью:
en-US-POSIX
- У меня есть prod (AWS do tnet lambda ) машина с локалью:
en_US.UTF-8
У меня есть этот кусок кода, чтобы получить правильный регистр для поля базы данных:
public string FixFieldCaseName(string fieldName)
{
var mappings = new Dictionary<string, string>(StringComparer.CurrentCultureIgnoreCase);
mappings.Add("test", "Test");
if (mappings.TryGetValue(fieldName, out var fixedFieldName) && fixedFieldName != fieldName)
{
_logger.Debug("stuff");
return fixedFieldName;
}
return fieldName;
}
Это работает локально и на лямбда, но не на сборке машины. Он возвращает мне исходную строку.
Local и Lambda: input ("TeSt") -> output ("Test")
Build machine: input ("TeSt") -> output ( "TeSt")
Он не работает в Ubuntu из-за локали (en-US-POSIX): https://github.com/dotnet/corefx/issues/17052
Имена полей используются для выполнения запросов в базе данных.
Как правильно это исправить?
- Я не уверен, использовать ли OrdinalIgnoreCase или InvariantCultureIgnoreCase, даже ПОСЛЕ того, как я перечитал лучшие практики на странице MSFT .
ИЛИ
Должен ли я везде указывать культуру в моем коде?
System.Globalization.CultureInfo.CurrentCulture = new System.Globalization.CultureInfo("en-US");
Спасибо за любую помощь.