Получение объекта и дочерней коллекции в NHibernate с использованием Linq - PullRequest
1 голос
/ 24 мая 2009

У меня проблема с использованием Linq для NHibernate для загрузки объекта и активной загрузки дочерней коллекции. Объекты выглядят так:

public class Order
{
    public Guid Id {get; set; }
    public IList<OrderLine> OrderLines {get;set;}
}
public class OrderLine
{
    public Guid Id {get;set;}
    public string Item {get;set;}
}

Я пытаюсь загрузить ордер с определенным идентификатором и (нетерпеливо) всеми его дочерними ордерами, используя Linq. Мой запрос выглядит так:

using (var s = _sessionFactory.OpenSession())
using (var tx = s.BeginTransaction())
{
    var order = from o in s.Linq<Order>().Expand("OrderLines")
                where o.Id == id
                select o;
    return order.First();
}

Однако, когда я отображаю порядок, свойство OrderLines содержит только один объект - база данных определенно имеет 3. Необычно, если я делаю foreach около order до возврата, я получаю все 3 дочерних элемента - это дважды попадает в базу данных.

Я попытался изменить запрос, чтобы использовать вместо него Single(), но это тоже не сработало.

Что-то не так с linq? Или мое использование Expand неверно?

Заранее спасибо,
Саймон.

Примечание: я использую FluentNHibernate Automapping для создания своего NH Mapping, и моя база данных - это база данных Sqlite (файл, а не в памяти).

1 Ответ

2 голосов
/ 24 мая 2009

Кажется, что эта функция имеет ошибку:

FirstOrDefault () прерывает FetchType = объединение с Linq для NHibernate

Посмотрите на сгенерированный запрос к базе данных, если в нем есть предложение TOP 1, это может быть проблемой.

Помните, что Linq для NHibernate еще далек от готовности к производству, поэтому могут возникать ошибки такого рода.

...