Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NHibernate“;多行“;错误_C#_Nhibernate_Fluent Nhibernate - Fatal编程技术网

C# NHibernate“;多行“;错误

C# NHibernate“;多行“;错误,c#,nhibernate,fluent-nhibernate,C#,Nhibernate,Fluent Nhibernate,我有一个系统,其中有用户,每个用户可以有多个票据,每个票据分配给一个模拟器。 有一个函数可以获取特定状态的所有票据,这返回了一个奇怪的错误 public class User { public int ID { get; set; } } public class Simulator { public int ID { get; set; } } public class Ticket { public int ID { get; set; } public

我有一个系统,其中有用户,每个用户可以有多个票据,每个票据分配给一个模拟器。 有一个函数可以获取特定状态的所有票据,这返回了一个奇怪的错误

public class User 
{
    public int ID { get; set; }
}

public class Simulator
{
    public int ID { get; set; }
}

public class Ticket
{
    public int ID { get; set; }
    public User User { get; set; }
    public Simulator Simulator { get; set; }
}
NHibernate功能如下所示:

public IList<Ticket> GetActiveTicketsPerUser(int userID)
{
    var criteria = Repository.Session.GetSession().CreateCriteria("GetTickets", "Ticket");

    criteria.Add(Restrictions.Eq("Ticket.User.ID", userID));
    criteria.Add(Restrictions.Eq("Ticket.Status.ID", new List<int>() { 1, 2 }); //Status the active tickets

    return criteria.List<Ticket>();
}
它使用一个表(一个视图),因为有一些来自其他数据库的记录/字段,我甚至不知道它是如何到达那里的

这个错误只有在我尝试“快速”完成时才会发生,如果我逐行调试每个函数,错误就不会发生。 我猜当NHibernate以它应该的速度运行时,它返回的是错误的东西,而当我缓慢运行时。。。工作

我已经用此消息/类似消息检查了其他问题,但我仍然无法理解


究竟发生了什么?我如何解决这个问题?

这可能是票证、用户和模拟器类中ID的类似命名吗


顺便说一句,我注意到这个类被称为Simulator,但错误是这样说的:Entity.Simulator

我留下这个供将来参考:当这个错误发生时,它与NHibernate无关。它在数据库中(一如既往)

如果出现此错误,并且类映射正确,请按照步骤获取NHibernate正在使用的命令的查询/查询结果,您会注意到DB结构/布局中存在错误。 在某个地方,有一个结果返回多个具有唯一ID的同一对象。

I“english”编辑了我的语言,但名称是正确的(Simulator)。至于ID,我不知道,这在大多数情况下都有效,就在有一大堆票的时候。同样的结构也适用于各种其他部门,没有问题。。。
public HttpResponseMessage GetActiveTickets()
{
    try
    {
        int userID = Convert.ToInt32(HttpContext.Current.Items["UserID"]);

        IList<Ticket> ticketList = Service.GetTickets(userID);

        //Converting to another type specific to return in the HttpResponseMessage
        IList<TicketResponse> rTickets = new List<TicketResponse>();
        for(int i = 0; i < ticketList.Count; i++)
        {
            TicketResponse ticket = TResponse.Convert(ticketList[i]);
            rTickets.Add(ticket);
        }

        return Request.CreateResponse(HttpStatusCode.OK, rTickets);
    }
    catch (Exception ex)
    {
    }
}
public class TicketMap : ClassMapping<Ticket>
{
    Lazy(true);
    ID(x => x.ID, map => { map.Column("TicketID"); map.Generator(Generators.Identity); });
    ManyToOne(x => x.Simulator, map => { map.Column("SimulatorID"); map.Cascade(Cascade.None); });
}