[英]EntityFramework and oracle Contain in a Where clause not working with a variable
我正在使用 ASP.NET MVC 4.5.2、實體框架 6.1.3 和 Oracle 19c (19.3.0) 數據庫。 我遇到了一個 EntityFramework 請求的奇怪行為。
有以下要求:
List<College> testQuery1 = unitOfWork.GetRepository<College>()
.AsQueryable()
.Where(college => college.Nom.Contains("A"))
.ToList();
我有以下結果 => testQuery1.Count = 172 。 但是有了這個要求:
string queryParameter = "A";
List<College> testQuery2 = unitOfWork.GetRepository<College>()
.AsQueryable()
.Where(college => college.Nom.Contains(queryParameter))
.ToList();
結果是testQuery2.Count = 0 。 這個問題只發生在我的 Oracle 19.3.0.0 數據庫,Oracle 19.10.0.0 或 12.1.2.0 一切正常,沒有差異。 以下是實體框架生成的查詢。 對於 testQuery1:
SELECT
"Extent1"."ID" AS "ID",
"Extent1"."ID_LIEU_RDV" AS "ID_LIEU_RDV",
"Extent1"."ID_ADRESSE" AS "ID_ADRESSE",
"Extent1"."DSIT_NOSITE" AS "DSIT_NOSITE",
"Extent1"."CODE_COLLEGE" AS "CODE_COLLEGE",
"Extent1"."NOM" AS "NOM",
"Extent1"."CREATED_BY" AS "CREATED_BY",
"Extent1"."CREATED_DATE" AS "CREATED_DATE",
"Extent1"."MODIFIED_BY" AS "MODIFIED_BY",
"Extent1"."MODIFIED_DATE" AS "MODIFIED_DATE"
FROM "DSS"."DSS_COLLEGE" "Extent1"
WHERE ("Extent1"."NOM" LIKE '%A%')
對於 testQuery2:
SELECT
"Extent1"."ID" AS "ID",
"Extent1"."ID_LIEU_RDV" AS "ID_LIEU_RDV",
"Extent1"."ID_ADRESSE" AS "ID_ADRESSE",
"Extent1"."DSIT_NOSITE" AS "DSIT_NOSITE",
"Extent1"."CODE_COLLEGE" AS "CODE_COLLEGE",
"Extent1"."NOM" AS "NOM",
"Extent1"."CREATED_BY" AS "CREATED_BY",
"Extent1"."CREATED_DATE" AS "CREATED_DATE",
"Extent1"."MODIFIED_BY" AS "MODIFIED_BY",
"Extent1"."MODIFIED_DATE" AS "MODIFIED_DATE"
FROM "DSS"."DSS_COLLEGE" "Extent1"
WHERE ("Extent1"."NOM" LIKE :p__linq__0 ESCAPE '\')
其中 p_linq_0 等於“%A%”。 如果我直接在數據庫上執行這些查詢,結果是一樣的,兩次都是 172 個結果。
如果我也用 StartsWith 和 EndsWith 替換包含,就會發生這種情況。 你知道這種奇怪的行為可能來自哪里嗎?
提前感謝您的任何見解。
我們終於找到了問題所在。 我與你分享,以防有人遇到同樣的問題。
在我們的 19.3.0 Oracle 數據庫創建后,NLS 參數“NLS_CHARACTERSET”的值錯誤並被更改。 這不是一個好主意,因為 Oracle 不建議在創建數據庫后更改 NLS 參數,這是我們問題的根源。 解決方案是,您可以想象回滾到舊值或創建另一個具有正確值的數據庫並遷移數據
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.