簡體   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