实体框架永远不会从存储过程

时间:2017-06-02 02:47:45

标签: c# sql-server entity-framework stored-procedures

我有使用EF调用的存储过程:

try
{
    StringBuilder sb = new StringBuilder();
    using (var context = new SchoolDBEntities())
    {
        //to and from are datetimes, district is a string
        var courses = context.GetCoursesBySchool(from, to, district);

        foreach (var cs in courses)
        { sb.Append(cs); }
        Console.WriteLine(sb.ToString());
    }
}
catch (Exception ex)
{
    Console.WriteLine("Error Message: " + ex.Message);
}

问题是,如果我通过一个足够小的日期范围;区域始终是必需的,我按预期收回数据。但是,如果使日期范围为例如一年或更多,或者甚至使它们为空;如果为空,SP知道忽略日期,SP似乎永远不会返回任何结果。事实上,在foreach循环之后的下一行执行的控制台写入线永远不会被击中。在这种情况下,代码永远不会落入CATCH块。我怀疑是因为返回了大量数据而引发异常,但由于CATCH没有被击中,我不确定发生了什么。

我看到很多建议,我建议你们需要设置EF的超时,因为它可能已经过去了,但是在这种情况下你会认为CATCH块至少会被击中而它不是表示从EF到SQL的超时。我怀疑,如果发生超时并且它与SP的性能问题有关可能正在发生,但这没有多大意义我在SQL管理工作室中测试了这个具有许多日期范围的SP;小而大,SP运行非常有效;在所有情况下,在几十万条记录下不到10秒。

这是我的问题:

类型' System.NotSupportedException'的第一次机会异常是否可能?发生在EntityFramework.dll中,可以立即关闭连接而不是将代码移到下一行执行中吗?

欢迎任何建议,但请尊重我,如果我遗漏了一些非常明显的事情,我会提前道歉。

0 个答案:

没有答案