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