Linq To SQL Any Throws InvalidOperationException:Sequence不包含任何元素

时间:2013-01-08 13:24:21

标签: asp.net-mvc-3 linq-to-sql

大约每天一两天,我的网站会在人们尝试登录时开始抛出错误,在重新启动IIS之前没有人可以登录。 Any()如何做到这一点以及我该怎么做才能解决它?

这是抛出异常的函数:

        public override bool ValidateUser(string username, string password)
    {
        var db = Access.Context;
        var query =
            from p in db.Players
            where p.PlayerName == username
                && p.Password == password 
            select p
        ;
        return query.Any();
    }

其他LINQ to SQL查询工作正常。这是堆栈跟踪。

InvalidOperationException: Sequence contains no elements 

   System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult) +1151
    System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries) +113
    System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query) +344
    System.Data.Linq.DataQuery`1.System.Linq.IQueryProvider.Execute(Expression expression) +23
    System.Linq.Queryable.Any(IQueryable`1 source) +243
    FortyTwoAccess.PlayerProvider.ValidateUser(String username, String password) in C:\dev\FortyTwo\FortyTwoAccess\PlayerProvider.cs:114
    FortyTwoClient.Models.AccountMembershipService.ValidateUser(String userName, String password) in C:\dev\FortyTwo\FortyTwoClient\Models\AccountModels.cs:117
    FortyTwoClient.Controllers.AccountController.LogOn(LogOnModel model, String returnUrl) in C:\dev\FortyTwo\FortyTwoClient\Controllers\AccountController.cs:42
    lambda_method(Closure , ControllerBase , Object[] ) +157
    System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17

2 个答案:

答案 0 :(得分:0)

有效吗?

public override bool ValidateUser(string username, string password)
{
    var db = Access.Context;
    return db.Players.Any(p => p.PlayerName == username && p.Password == password);
}

答案 1 :(得分:0)

对此的修复是不使用类变量来保存上下文,而是在使用包装的每个方法中本地实例化上下文。