Linqを使ってNHibernateにオブジェクトをロードし、熱心に子コレクションをロードする際に問題があります。オブジェクトは、次のようになります。私は、特定のIDと注文をロードしようとしていると(熱心に)それがすべてのLINQを使用して、子注文ラインだ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;}
}
。私のクエリは次のようになります。
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
プロパティは、1つのオブジェクトのみが含まれています - データベースは間違い3.奇妙な話があり、私は復帰前order
周りのforeachを行う場合、私は入手できますか3つの子アイテムすべて - しかし、これはデータベースを2回ヒットします。
代わりにSingle()
を使用するようにクエリを変更しようとしましたが、どちらも機能しません。
私はlinqで何か問題がありますか?または、Expand
の私の使用は間違っていますか?
ありがとうございます。
Simon。
注:FluentNHibernate Automappingを使用してNHマッピングを作成しています。データベースはSqliteデータベース(メモリにはないファイル)です。
ありがとう、私はこれがバグかもしれないと思ったが、私は正しいLinqメソッドを使用していたことを確認したい。 NHProfを使うと、クエリに 'limit 1'節(' top 1'と同じsqlite)があることがわかります。 コードを次のように変更しました。 return order.ToList()[0]; これは期待どおりに動作します。 ありがとうございます。 – Simon