繁体   English   中英

实体框架语言环境配置

[英]Entity framework locale configuration

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

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 Studio 中明确编写错误的文化时,内联解析器将理解它不是正确的语言环境。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM