2009-05-24 2 views
1

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

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;} 
} 

Я пытаюсь загрузить орден с определенным ID и (охотно) все его дочерние OrderLines с помощью 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. Причудливо, если я делаю Еогеасп вокруг order до возвращения я получить все 3 дочерних элемента - но это дважды попадает в базу данных.

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

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

Заранее спасибо,
Simon.

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

ответ

2

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

FirstOrDefault() breaks FetchType=join with Linq to NHibernate

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

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

+1

Спасибо, я думал, что это может быть ошибка, но мне хотелось проверить, что я использую правильный метод Linq. Использование NHProf Я вижу, что запрос имеет предложение 'limit 1' (эквивалент sqlite' top 1'). Я изменил свой код: return order.ToList() [0]; , и это работает как ожидалось. Спасибо. – Simon

Смежные вопросы