Nhibernate如何对待.FirstOrDefault与.SingleOrDefault有什么区别?可能的错误?

时间:2010-12-20 18:18:39

标签: nhibernate linq-to-nhibernate

刚开始使用NHibernate并使用Nhib 3.0(3.0.0.2001)Linq以及以下型号

public class Request
{
    public virtual Guid Id { get; set; }
    public virtual State {get;set;}
}
public class State
{
    public virtual Guid Id {get;set;}
}

所以我只是想根据它的状态ID来检索请求。

_session.Query<Request>().Where(x => x.State.Id==someGuidValue).FirstOrDefault();

看起来很简单,但这会因为生成的sql而出现sql错误,看起来@p0参数丢失了,但不知道为什么会包含在这里。

{"Line 1: Incorrect syntax near '('."}
 select TOP (@p0) requ0_.Id as Id0_
, requ0_.State_id as State8_0_ 
from [Request] requ0_ where requ0_.State_id=@p1 ]
  Name:p1 - Value:a2e63925-6628-4786-a621-9e5200d5ab71

但是,使用SingleOrDefault可以正常工作。

_session.Query<Request>().Where(x => x.State.Id==someGuidValue).SingleOrDefault();

任何见解都将受到赞赏。感谢

1 个答案:

答案 0 :(得分:1)

我相信当多个记录符合您的选择条件时,SingleOrDefault会出错。无论返回多少记录,FirstOrDefault只会拉出第一个。

这就是它在LINQ-To-SQL中的工作原理