Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架查询超时_C#_Asp.net Mvc_Linq_Entity Framework - Fatal编程技术网

C# 实体框架查询超时

C# 实体框架查询超时,c#,asp.net-mvc,linq,entity-framework,C#,Asp.net Mvc,Linq,Entity Framework,在我的控制器中,我有以下代码: public ActionResult Syslogs(string IPAddress) { IEnumerable<Syslogd> syslogs = db.Syslogds.Take(100).ToList(); if (!String.IsNullOrEmpty(IPAddress)) { syslogs = db.Syslogds.Where(s => s.MsgHos

在我的控制器中,我有以下代码:

    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());
    }
public ActionResult系统日志(字符串IPAddress){
IEnumerable syslogs=db.Syslogds.Take(100.ToList();
如果(!String.IsNullOrEmpty(IPAddress)){
syslogs=db.Syslogds.Where(s=>s.MsgHostname==IPAddress).Take(100).ToList();
}
返回视图(syslogs.ToList());
}
每当我将某个值传递给
IPAddress
变量时,查询就会超时。我不知道为什么会发生这种情况,也不知道我该如何预防。该值是否不存在于数据库中,或者只是需要很长时间才能找到?以下是我收到的错误消息:

类型的例外 中出现“System.Data.Entity.Core.EntityCommandExecutionException” EntityFramework.SqlServer.dll,但未在用户代码中处理

其他信息:执行命令时出错 定义。有关详细信息,请参见内部异常

内部异常:

{“超时已过期。在完成之前已过超时时间 操作或服务器没有响应。“}


该值可能不存在,但超时只意味着查询没有在给定的命令执行时间内完成。我认为EF的默认超时是命令的30秒


基本问题,但是,如果Syslogd表有许多记录,那么MsgHostname上是否有索引?

该值可能不存在,但超时仅表示查询没有在给定的命令执行时间内完成。我认为EF的默认超时是命令的30秒


基本问题,但是,如果您的Syslogd表有许多记录,那么MsgHostname上是否有索引?

正如Ryan所说,命令的EF默认超时为30秒。因此,您可以增加执行超时时间

通过使用:

考虑一下这一点:

  • 此外,您正在使用
    .ToList()
    ,这是强制执行查询的方法 立即,我认为您可以避免这种情况以提高性能
  • IEnumerable
    适用于查询来自内存内集合(如列表、数组等)的数据,但不适用于查询来自内存外集合(如远程数据库、服务)的数据和分页 因此,我强烈建议在这种情况下使用
    IQueryable

    参考文献


    正如Ryan所说,命令的EF默认超时时间为30秒。因此,您可以增加执行超时时间

    通过使用:

    考虑一下这一点:

  • 此外,您正在使用
    .ToList()
    ,这是强制执行查询的方法 立即,我认为您可以避免这种情况以提高性能
  • IEnumerable
    适用于查询来自内存内集合(如列表、数组等)的数据,但不适用于查询来自内存外集合(如远程数据库、服务)的数据和分页 因此,我强烈建议在这种情况下使用
    IQueryable

    参考文献


    另一方面,您始终在执行第一个查询,即使您正在使用IP上的筛选器覆盖这些值。您应该将第一个查询移动到else子句,以避免做任何额外的不必要的工作。Syslogd有多少条记录?数据库是否在单独的计算机上?什么是网络带宽使用率?另一方面,您总是在执行第一个查询,即使您正在使用IP上的筛选器覆盖这些值。您应该将第一个查询移动到else子句,以避免做任何额外的不必要的工作。Syslogd有多少条记录?数据库是否在单独的计算机上?什么是网络带宽使用率?我发现数据库中根本不存在该记录。我想我现在的问题是如何在执行查询之前检查它?我尝试了db.Syslogd.Any(),但没有成功。我发现数据库中根本不存在该记录。我想我现在的问题是如何在执行查询之前检查它?我尝试了db.Syslogd.Any(),但没有成功。
    // Specify a timeout for queries in this context, in seconds.
    context.CommandTimeout = 120;