1

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

特定の 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プロパティにはオブジェクトが 1 つしか含まれません。データベースには間違いなく 3 つのオブジェクトがあります。奇妙なことに、返す前に foreach を実行するとorder、3 つの子アイテムすべてが取得されますが、これはデータベースに 2 回ヒットします。

代わりに使用するクエリを変更しようとしましSingle()たが、それも機能しません。

私はlinqで何か間違っていますか?それとも私の使い方がExpand間違っていますか?

前もって感謝します、
サイモン。

注: FluentNHibernate Automapping を使用して NH マッピングを作成しており、データベースは Sqlite データベース (メモリ内ではなくファイル) です。

4

1 に答える 1

2

この機能にはバグがあるようです:

FirstOrDefault() が FetchType=join と Linq を NHibernate に分割する

生成されたデータベース クエリを見てください。TOP 1 句がある場合は、これが問題である可能性があります。

Linq to NHibernate はまだ本番環境にはほど遠いため、この種のバグが発生する可能性があることに注意してください。

于 2009-05-24T13:42:58.150 に答える