' /'中的服务器错误应用。序列包含多个元素

时间:2014-12-29 19:07:56

标签: c# asp.net linq exception-handling

我目前正在更新我的项目(ASP.net C#)。在清洁,构建和发布网站方面,一切都在本地工作。将文件上传到服务器进行生产时,我收到一条错误消息,无法修复。

以下是信息。有人可以提供帮助,以便我可以在我的服务器上发布吗?

Sequence contains more than one element 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.InvalidOperationException: Sequence contains more than one element

Source Error: 
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 

Stack Trace: 

[InvalidOp`enter code here`erationException: Sequence contains more than one element
   System.Linq.Enumerable.SingleOrDefault(IEnumerable`1 source) +5876344
   System.Linq.Queryable.SingleOrDefault(IQueryable`1 source, Expression`1 predicate) +490
   Sinai.Ors.Domain.Repositories.UserRepository.GetUser(String mnemonic) in \\mdpointfs\md\moupar\Public Desktop\ORSUPDATE\Sinai (2)12.22.2014 VS2010\Sinai\Sinai.Ors.Domain\Repositories\UserRepository.cs:19
   SinaiMasterPage.OnInit(EventArgs e) +42
   System.Web.UI.Control.InitRecursive(Control namingContai`enter code here`ner) +186
   System.Web.UI.Control.InitRecursive(Control namingContainer) +291
   System.Web.UI.Page.ProcessRequestMain(Boolean includeS`enter code here`tagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2098

________________________________________
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.34212

2 个答案:

答案 0 :(得分:2)

堆栈跟踪告诉您完全错误所在的位置。在GetUser()方法中,对集合调用SingleOrDefault()。该集合有多个元素,因此抛出异常。

代码假设集合中永远不会有多个元素,并且该假设对于该数据是假的。您有几个选择:

  1. 数据不好,正确无误。如果数据不应该处于此状态,则某处缺少数据完整性检查。对列或列集的唯一约束,外键关系等。架构可能无法维护此特定的数据完整性度量,在这种情况下,应用程序代码应该强制执行它。
  2. 如果只有一条记录,请强制执行。检查集合的Count(),如果它大于1,则处理该错误情况。向用户显示消息?通知某人?这取决于你。
  3. 如果没有多条记录并且您只想要第一条记录,请使用FirstOrDefault()代替SingleOrDefault()
  4. 无论哪种方式,堆栈跟踪都会告诉您问题所在。

答案 1 :(得分:1)

您是否期望GetUser()可以有多个值?如果没有,SingleOrDefault可能会向您显示不一致。然后,您应该修复导致它的错误,并使其SingleOrDefault而不是FirstOrDefault

如果存在多个元素,

SingleOrDefault会抛出异常。

在这里,您可以准确地看到单个或默认方法的作用:http://msdn.microsoft.com/en-us/library/system.linq.enumerable.singleordefault(v=vs.100).aspx