Какая разница в том, как Nhibernate рассматривает. возможный баг? - PullRequest
2 голосов
/ 20 декабря 2010

Только что начав с 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;}
}

Итак, я просто пытаюсь получить запрос на основе его идентификатора состояния.

_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 Ответ

1 голос
/ 20 декабря 2010

Я полагаю, что SingleOrDefault выдаст ошибку, если более чем одна запись соответствует выбранным критериям. Где FirstOrDefault будет просто тянуть первое, независимо от того, сколько записей возвращено.

Вот как это работает в LINQ-To-SQL

...