質問

私は、オブジェクトをロードし、熱心に子コレクションをロードするために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;}
}

私はそれのすべては、LINQのを使用して、子注文ラインだ特定のIDとし、(熱心に)注文をロードしようとしています。私のクエリは次のようになります:

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つだけ含まれています - データベースは間違いなく私が戻る前にorder周りのforeachを行う場合、私はすべての3つのアイテムを得るか、3.奇妙な話を持っている - これは、データベースをヒット二回ます。

私が代わりにSingle()を使用するようにクエリを修正しようとしたが、それはどちらか動作しません。

私は、LINQと間違って何かをやっていますか?またはExpandの私の使用が間違っているのですか?

事前のおかげで、
サイモンます。

注:私は私のNHマッピングを作成するためにFluentNHibernate自動マッピングを使用していますし、私のデータベースはSqliteをデータベース(ファイルではなく、メモリ内)である。

役に立ちましたか?

解決

この機能はバグがあると思われます:

FirstOrDefault()はFetchTypeは= NHibernateはのにLINQのと接合破断します

それがTOP 1句を持っている場合、これは問題になる可能性があり、生成されたデータベースクエリを見てみましょう。

NHibernateのにLINQのはまだ遠い生産から準備ができているので、バグのこの種が発生する可能性があることを覚えておいてください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top