.net - 奇怪的 LINQ 异常

标签 .net sql asp.net-mvc linq

我有一个与 these 类似的问题posts :我将单独发布以提供有关我的案例中的问题的更多信息,以及我已采取的调试步骤。

基本上,该网站可以正常运行 12 个多小时,然后突然停止运行。我将开始在以前工作正常的 LINQ 查询中抛出奇怪的异常。

我在这篇文章的底部包含了堆栈跟踪。

根据在类似 SO 帖子中找到的建议,我通过直接从服务器资源管理器中的数据库拖动表来删除并重新制作我的 DBML。对比Git中的新旧,我发现有几个字段不一样:

  • 在 dbml 中将 varchar(255) 设置为 nchar(10) 的一个实例
  • 以前在 dbml 中没有 NOT NULL 的 varchar(255) 的两个实例
  • int(4) 字段以前在 dbml 中没有 NOT NULL

一些观察/笔记:

  • 网站在一段时间内 100% 正常运行,然后就开始抛出这些错误
  • 我可以通过在 IIS 中重新启动站点通过重新启动 MSSQL 服务器来临时修复它,但问题通常会在第二天再次出现
  • 我不知道如何手动复制它
  • 对于某些页面,我可以多次重新加载它们并得到不同但相似的异常
    • 我可能会在调用 .Count() 的行上得到一个 InvalidOperationException,然后重新加载它并在一个行上得到一个 IndexOutOfRangeExcpetion调用 .Any().First()
    • 尽管异常会发生变化,但无论如何我总是会在某些页面上遇到异常 - 它们永远不会暂时消失
  • 我正在使用存储库模式,所以我的每个类都有一个带有私有(private) DataContext 成员的存储库类 - 这可能是原因吗?
  • 该网站有一个部分 View ,其中包含来自数据库的导航项,这似乎总是可以正常加载,但从数据库加载其他内容却失败了。也许这个 block 被缓存了,这就是它继续工作的原因?

似乎总是在这一行抛出异常:

System.Data.Linq.SqlClient.SqlProvider.Execute(表达式查询,QueryInfo queryInfo,IObjectReaderFactory 工厂,Object[] parentArgs,Object[] userArgs,ICompiledSubQuery[] subQueries,Object lastResult)+4539

对于为什么会发生这种情况以及如何解决这个问题有什么想法吗?

编辑 1: 我在相应的堆栈跟踪上方添加了相关代码。执行最后一行代码时会抛出异常。

这是我在重新启动站点之前能够复制粘贴的几个堆栈跟踪:

IEnumerable<Chapter> toc = (from c in db.Chapters
    where c.Sections.Any()
    orderby c.ChapterNumber ascending
    select c);
return toc.Count();

[InvalidOperationException: Sequence contains more than one element]
   System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult) +4539
   System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries) +207
   System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query) +500
   System.Data.Linq.DataQuery`1.System.Linq.IQueryProvider.Execute(Expression expression) +41
   System.Linq.Queryable.Count(IQueryable`1 source) +352
   MvcPaging.PagedList`1.Initialize(IQueryable`1 source, Int32 index, Int32 pageSize, Nullable`1 totalCount) in C:\path\to\my\project\MvcPaging\src\MvcPaging\PagedList.cs:63
   MvcPaging.PagedList`1..ctor(IEnumerable`1 source, Int32 index, Int32 pageSize, Nullable`1 totalCount) in C:\path\to\my\project\MvcPaging\src\MvcPaging\PagedList.cs:16
   MvcPaging.PagedList`1..ctor(IEnumerable`1 source, Int32 index, Int32 pageSize) in C:\path\to\my\project\MvcPaging\src\MvcPaging\PagedList.cs:10
   MvcPaging.PagingExtensions.ToPagedList(IEnumerable`1 source, Int32 pageIndex, Int32 pageSize) in C:\path\to\my\project\MvcPaging\src\MvcPaging\PagingExtensions.cs:77
   MyNamespace.Controllers.ChaptersController.TableOfContents(Nullable`1 page) in C:\path\to\my\project\Controllers\ChaptersController.cs:73
   lambda_method(Closure , ControllerBase , Object[] ) +118
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +264
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +39
   System.Web.Mvc.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() +129
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +784922
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +314
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +784976
   System.Web.Mvc.Controller.ExecuteCore() +159
   System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +335
   System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +62
   System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +20
   System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +54
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +453
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +37




var contentTop = (new PageRepository()).FindAllPages().Where(p => p.Slug == "login-top");
var contentBot = (new PageRepository()).FindAllPages().Where(p => p.Slug == "login-bottom");
ViewData["ContentAboveTheBox"] = (contentTop.Any() ? contentTop.First().HTML : String.Empty);



[IndexOutOfRangeException: Index was outside the bounds of the array.]
   System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult) +4539
   System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries) +207
   System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query) +500
   System.Data.Linq.DataQuery`1.System.Linq.IQueryProvider.Execute(Expression expression) +50
   System.Linq.Queryable.First(IQueryable`1 source) +383
   MyNamespace.Controllers.AccountController.SetLoginContentAreas() in C:\path\to\my\project\Controllers\AccountController.cs:112
   MyNamespace.Controllers.AccountController.LogIn(String userName, String password, Nullable`1 rememberMe, String returnUrl, Nullable`1 IsEnc) in C:\path\to\my\project\Controllers\AccountController.cs:122
   MyNamespace.Controllers.AccountController.LoginPassThru() in C:\path\to\my\project\Controllers\AccountController.cs:82
   lambda_method(Closure , ControllerBase , Object[] ) +79
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +264
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +39
   System.Web.Mvc.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() +129
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +784922
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +314
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +784976
   System.Web.Mvc.Controller.ExecuteCore() +159
   System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +335
   System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +62
   System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +20
   System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +54
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +453
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +371

在某个特定页面上还抛出了 InvalidCastException。更新 dbml 似乎无法解决此问题,但重新启动站点可以。

最佳答案

您是否在每次请求时处理您的 DataContext(您应该这样做)?或者您是否有一个永远存在的 DataContext(听起来可能是这种情况)?

听起来可能是线程问题。

关于.net - 奇怪的 LINQ 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6653874/

相关文章:

c# - 如何将多个值传递给 MVC 应用程序中的自定义 RoleProvider GetUserRoles 方法?

asp.net - ASP .NET MVC2 中的 Web 服务

c# - 随机 HTTP 错误 403.14 - 禁止

.Net Core DebugDiag 等价物

c# - C# 中双向关联的值相等

c# - 如何在 MVC 中路由特定的 URL,否则返回请求的 URL

sql - 求每个D的总点数,如果P中没有D,那么points应该为0

mysql:内部查询在 selectif 语句中不起作用

c# - 带有 iTextSharp 的 PDF 表单

sql - 'Interval' 的 JPA Hibernate 查询问题