2017-02-09 48 views
0

我有下面這個非常簡單的函數,它返回表中行的列表。EF 6自動添加行限制

public IEnumerable<Configuration> GetConfigurations() 
{ 
    var tbl = Context.Configurations.AsNoTracking().Where(a => a.ActiveFlag == 'Y').ToList(); 

    return tbl; 
} 

問題是有時當IIS應用程序池重新啓動時,上面的代碼生成以下SQL:

SELECT 
"Extent1"."ID" AS "ID", 
"Extent1"."NAME" AS "NAME", 
"Extent1"."VALUE" AS "VALUE", 
"Extent1"."DESCRIPTION" AS "DESCRIPTION", 
"Extent1"."ACTIVE_FLAG" AS "ACTIVE_FLAG", 
"Extent1"."CATEGORY_ID" AS "CATEGORY_ID" 
FROM "SCHEMANAME"."CONFIGURATIONS" "Extent1" 
WHERE ('Y' = "Extent1"."ACTIVE_FLAG") 
WHERE (ROWNUM <= (50)); 

請注意,在那裏的最後一行,沒有理由就在那裏。應用程序開始拋出異常,因爲「SQL命令沒有正確結束」,只要重新啓動應用程序池就會自動修復問題。

任何人都知道爲什麼Entity Framework 6.1.3會在沒有任何原因的情況下添加額外的where子句?我使用Oracle.ManagedDataAccess.EntityFramework版本=「12.1.2400」與「Oracle.ManagedDataAccess」版本=「12.1.24160419」包。

+0

您使用的是最新版本的Oracle驅動程序嗎? – DavidG

+0

根據:[nuget包](https://www.nuget.org/packages/Oracle.ManagedDataAccess/)似乎我落後於一個小版本。如果你問的是管理的驅動程序。你有理由相信這可能是原因嗎?事情很少發生,所以我沒有具體的測試方法,如果我升級。 – Neel

+0

作爲一種解決方法,我現在已經完成了這項工作。仍然不知道原因。如果未來出現問題,我會在此更新。 'Context.Configurations.Load(); var tbl = Context.Configurations.Local.Where(a => a.ActiveFlag == Constants.CSS_TRUE).ToList();' – Neel

回答

0

更改了在應用程序池回收後加載應用程序時EF加載第一個表格的方式,如下所示修復了這些問題。

Context.Configurations.Load(); 
var tbl = Context.Configurations.Local.Where(a => a.ActiveFlag == 'Y').ToList(); 

問題再次沒有發生。