ASP.Net MVC 3 System.Data.SqlClient.SqlException超时已过期

时间:2012-08-22 11:26:09

标签: asp.net-mvc-3 sql-server-2008 entity-framework-4.1 timeout

我正在使用Entity Framework 4.1开发ASP.Net MVC 3 Web应用程序。我最近将应用程序上传到我的测试服务器,我注意到ELMAH提供的错误电子邮件说明

  

System.Data.SqlClient.SqlException超时已过期。超时期限   在完成操作之前经过或服务器没有经过   响应。

下面显示了我的一些代码。

控制器

public ActionResult VerifyEmail(int uid, string vid)
{
    var userList = _userService.VerifyEmail(uid,vid).ToList();
}

服务

public IList<User> VerifyEmail(int uid, string emailvcode)
{
    return _uow.User.Get(u => u.userID == uid && u.emailVerificationCode == emailvcode).ToList();
}

工作单元

 public class UnitOfWork : IUnitOfWork, IDisposable
 {
        readonly LocumEntities _context = new LocumEntities();

        private GenericRepository<User> _user = null;

        public IGenericRepository<User> User
        {
            get
            {
                if (_user == null)
                {
                    _user = new GenericRepository<User>(_context);
                }
                return _user;
            }

        }

  }

通用存储库

public IList<TEntity> Get(Expression<Func<TEntity, bool>> filter = null,Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,string includeProperties = "")
{
    IQueryable<TEntity> query = dbSet;

    if (filter != null)
    {
        query = query.Where(filter);
    }

    foreach (var includeProperty in includeProperties.Split
        (new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
    {
        query = query.Include(includeProperty);
    }

    if (orderBy != null)
    {
        return orderBy(query).ToList();
    }
    else
    {
        return query.ToList();
    }
}

当Service方法中的行尝试执行时,有时会发生超时错误

return _uow.User.Get(u => u.userID == uid && u.emailVerificationCode == emailvcode).ToList();

此错误不是每次都发生,只是偶尔发生,但是,我不明白为什么这个查询会返回一个用户列表,或者一个NULL列表。

任何人都可以从我的代码中发现为什么会发生这种情况?

任何反馈都会受到赞赏,因为我不知道为什么会这样。

感谢。

1 个答案:

答案 0 :(得分:0)

尝试增加连接字符串中的timeout属性。还运行SQL Server Profiler以查看为查询生成了多少SQL,因为查询可能返回导致超时的大量数据。