2017-02-09 58 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(); 

问题再次没有发生。