Entity framework 语言环境配置

Entity framework locale configuration

我遇到过这样一种情况,即查询将通过 EF 在应用程序中 运行,但在我的 SQL console/IDE 中却不会,反之亦然。例如,当我将 VARCHAR2 列转换为 BINARY_FLOAT(如 linq 代码所示)时,即 50,23% 形式的数据被转换为 50,23,然后进行转换。 sql 控制台说任何带逗号的都是无效数字,而 EF 没有。将该逗号更改为点,将使 EF 报告 ORA 错误 "invalid number",但控制台随后可以正常工作。

var query = db.OWNER
                .Where(o => o.CASE_ID == caseId && o.STOCK != null && o.STOCK.EndsWith("%"))
                .Select(o => o.STOCK.Replace("%", "")).Cast<float>();
var result = query.ToList();

EF 从哪里获取这个本地化配置?更具体地说,它是如何改变十进制数字格式的?

这可能是 CultureInfo 问题,请尝试明确设置小数点分隔符?

CultureInfo culture = new CultureInfo("en-US");
culture.NumberFormat.NumberDecimalSeparator = ".";
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;

您当前的线程与数据库之间存在文化差异。

当您打开与数据库的连接并准备查询时,EF 将操纵参数以避免 SQL 注入,就像它对添加参数函数所做的那样。

此时,无论是日期对象还是小数或任何其他特定于文化的数据类型,将要查询的最终字符串都转换为特定于数据库文化的格式。

当您在 SQL 工作室中明确写入错误的区域性时,内联解析器将理解它不是正确的语言环境。

如果您尝试在没有正确的区域性格式的情况下进行转换,您的代码中也会发生同样的事情。