【问题标题】:Getting "Sequence contains no elements" exception获取“序列不包含元素”异常
【发布时间】:2015-04-16 21:38:05
【问题描述】:

我是 .net 框架的新手,nhibernate 和 iqueryable。

我有一个 um_user_login_count 表,它有 4 列。它们是 id、login_ip、login_count 和 login_user_id。

这是我的 UserLoginCount.cs

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Project.UserManagement" namespace="Project.UserManagement.Domain" schema="UserManagement">
  <class name="UserLoginCount" table="um_user_login_count">
    <id name="Id" column="id" generator="identity" />
    <property name="Ip" column="login_ip" length="255" />
    <property name="Count" column="login_count" length="255" />
    <property name="UserId" column="login_user_id" />
  </class>
</hibernate-mapping>

这是我的 LoginCount.cs 文件

namespace Project.UserManagement.Domain
{
    using System;
    using Iesi.Collections.Generic;
    using Project.ORM;

    public class UserLoginCount : UserManagementEntity<UserLoginCount>
    {
        public UserLoginCount() { }

        public virtual int Id { get; set; }
        public virtual string Ip { get; set; }
        public virtual string Count { get; set; }
        public virtual string UserId { get; set; }
    }
}

这是我在 UMDataService 代码中声明的内容

public static IQueryable<UserLoginCount> UserLoginCount
        {
            get
            {
                return DataServiceInstance.CurrentSession.Query<UserLoginCount>();
            }
        }

这里是我被称为服务的代码 -

public string GetLoginInfo(string id)
        {
            UserLoginCount cnt = UMDataServices.UserLoginCount.Single();
            return cnt.Ip;
        }

但我收到一条错误消息,提示“序列不包含任何元素”。我对此完全陌生。我什至不确定我是否正确地提出了这个问题。

【问题讨论】:

  • 谢谢大家的回答。我仍然没有找到解决问题的方法。但是当我找到它时,我会在这里回答。

标签: c# .net wcf nhibernate iqueryable


【解决方案1】:

UMDataServices.UserLoginCount.Single() 预计必须有恰好 1 个条目。在您的情况下,没有条目,并且按预期抛出异常。

还有其他选项:SingleOrDefault()、First()、FirstOrDefault、...

您可以根据自己的要求选择一种。

【讨论】:

  • 但是数据库中有很多数据
  • @eddard.stark:有很多数据,但您的查询可能有问题,没有返回数据。
  • 如何找到查询?
  • 我用过First,例外是一样的
  • @eddard.stark:在你的情况下,没有记录,所以 First 也会抛出异常。
【解决方案2】:

这一行UserLoginCount cnt = UMDataServices.UserLoginCount.Single();

可能是罪魁祸首。您可以将其更改为 SingleOrDefault 并检查是否为空。

UserLoginCount cnt = UMDataServices.UserLoginCount.SingleOrDefault();
if(cnt != null) { /*do stuff */}

【讨论】:

  • 但是数据库中有很多数据
  • @eddard.stark 他们可能是,但您的查询引用“CurrentSession”是他们匹配的行吗?
【解决方案3】:

Single在以下情况下会抛出异常:

ArgumentNullException

  • 源或谓词为空。

InvalidOperationException

  • 没有元素满足谓词中的条件
  • 多个元素满足谓词条件。
  • 源序列为空。

您可以使用SingleOrDefault 阻止它。

 UserLoginCount cnt = UMDataServices.UserLoginCount.SingleOrDefault();
 string ip = null;
 if(cnt != null)
      ip = cnt.Ip;
 return ip;

【讨论】:

  • 但是数据库中有很多数据
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多