4

次のクエリを実行すると、「feedItemQuery」に複数のアイテムが含まれていることを示す例外が発生します (そのため、SingleOrDefault は機能しません)。

これは、DistinctRootEntity トランスフォーマーなしで Criteria API を使用する場合に予想される動作ですが、linq を使用する場合は、単一のルート エンティティ (FeedItem、すべての広告を含む (ICollection の) プロパティ Ads を持つ) を取得することを期待しています。

NHibernate.Linq に DistinctRootEntity トランスフォーマーを使用するように指示する方法はありますか?

私のクエリ:

var feedItemQuery = from ad in session.Linq<FeedItem>().Expand("Ads")
                   where ad.Id == Id
                   select ad;

var feedItem = feedItemQuery.SingleOrDefault(); // This fails !?

マッピング:

<class name="FeedItem" table="FeedItems" proxy="IFeedItem">
    <id name="Id" type="Guid">
        <generator class="guid.comb"></generator>
    </id>
 ...
    <set name="Ads" table="Ads">
        <key column="FeedItemId" />
        <one-to-many class="Ad" />
    </set>
</class>

前もって感謝します

4

2 に答える 2

6

RegisterCustomAction メソッドを使用して、結果トランスフォーマーを設定できます。

var linqsession = session.Linq<FeedItem>();
linqsession.QueryOptions.RegisterCustomAction(c => c.SetResultTransformer(new DistinctRootEntityResultTransformer()));
var feedItemQuery = from ad in linqsession.Expand("Ads")
                    where ad.Id == Id
                    select ad
于 2009-09-01T13:27:28.620 に答える