我有使用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中,可以立即关闭连接而不是将代码移到下一行执行中吗?
欢迎任何建议,但请尊重我,如果我遗漏了一些非常明显的事情,我会提前道歉。