我正在尝试在MVC中提取SQL Server视图的结果。视图本身相对简单,UNION将几个表放在一起 - 运行时返回行需要大约2秒钟。我在MVC中将视图添加到我的模型中。
在我的控制器中,我有以下代码,它旨在以JSON格式返回SQL视图中的值: -
public JsonResult GetActivity(string LocalIdentifier)
{
return Json(db.Activities.Where(r => r.LocalIdentifier== LocalIdentifier).ToList(), JsonRequestBehavior.AllowGet);
}
当我尝试运行它时,提供有效的LocalIdentifier
暂时没有任何反应,然后我在Visual Studio中得到一个异常(在用户代码中未处理)。作为参考,这通常只返回来自SQL的30到50行数据。
查看内部异常我收到此错误: -
“超时已过期。操作完成前经过的超时时间或服务器没有响应。”
我在我的应用程序的其他地方做过类似的事情并且工作正常 - 我在MVC中看不出我的代码有什么问题。还有什么我可以看看来帮助诊断和解决这个问题吗?
更新
有趣的是,我刚刚更改了代码,只提取了一行(只是为了看看会发生什么 - 见下文)并立即运行......这可能是ToList()的问题吗?是否有另一种方法可以实现我想要尝试做的事情?
public JsonResult GetActivity(string LocalIdentifier)
{
return Json(db.Activities.First(r => r.LocalIdentifier== LocalIdentifier), JsonRequestBehavior.AllowGet);
}
答案 0 :(得分:0)
您应该尝试直接在sql server上运行生成的查询。我希望查询运行超过30秒,导致超时。默认超时值为30秒,因此您预期会看到您的行为。
处理它的两种方法:
答案 1 :(得分:0)
这取决于db.Activities
的定义方式。如果它具有其他实体的属性(意味着数据库中的其他表),那么这些也可以由EF加载,即使您没有明确指定,因为JSON正在序列化每个对象和其属性。即使是像这样的简单陈述,数据库的一半或更多也可能最终被加载
This SO question有几个答案可以帮助您更好地了解幕后发生的事情,然后进行修复。
答案 2 :(得分:0)
如果查询在DB中运行正常,那么您的ORM侧面部分似乎有问题,您应该在那里搜索问题