【发布时间】:2014-10-29 20:00:47
【问题描述】:
在我的控制器中,我有以下代码:
public ActionResult Syslogs(string IPAddress) {
IEnumerable<Syslogd> syslogs = db.Syslogds.Take(100).ToList();
if (!String.IsNullOrEmpty(IPAddress)) {
syslogs = db.Syslogds.Where(s => s.MsgHostname == IPAddress).Take(100).ToList();
}
return View(syslogs.ToList());
}
每当我将某个值传递给IPAddress 变量时,查询就会超时。我不确定为什么会发生这种情况或如何防止它。该值是否在数据库中不存在,或者只是需要很长时间才能找到它?这是我收到的错误消息:
类型异常 'System.Data.Entity.Core.EntityCommandExecutionException' 发生在 EntityFramework.SqlServer.dll 但未在用户代码中处理
附加信息:执行命令时出错 定义。有关详细信息,请参阅内部异常。
内部异常:
{"超时时间已过。在完成之前的超时时间已过 操作或服务器没有响应。"}
【问题讨论】:
-
附带说明,即使您使用 IP 上的过滤器覆盖这些值,您也始终执行第一个查询。您应该将第一个查询移到 else 子句以避免做任何额外的不必要的工作。
-
Syslogd 有多少条记录?数据库是否在单独的机器上?什么是网络带宽使用率?
标签: c# asp.net-mvc linq entity-framework