实体框架语言环境配置

时间:2019-12-09 17:41:23

标签: c# oracle entity-framework linq-to-entities

我遇到了这样一种情况,查询将通过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在哪里使用此本地化配置?更具体地说,如何更改十进制数字格式?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

当前线程与数据库之间的区域性差异。

当您打开与数据库的连接并准备查询时,EF会像使用添加参数功能一样操作参数以避免SQL注入。

这时,无论是日期对象还是小数或其他特定于区域性的数据类型,将作为查询的最终字符串都将转换为特定于数据库区域性的格式。

当您在SQL Studio中显式编写错误的区域性时,内联解析器将了解它不是正确的语言环境。

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