当我执行以下查询时,我收到一个异常,告诉我“feedItemQuery”包含多个项目(因此 SingleOrDefault 不起作用)。

这是使用不带 DistinctRootEntity 转换器的 Criteria api 时的预期行为,但在使用 linq 时,我希望获得单个根实体(FeedItem,具有包含所有广告的属性 Ads(ICollection))。

有没有办法告诉 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>

提前致谢

最佳答案

您可以使用 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

关于c# - NHibernate Linq 和 DistinctRootEntity,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/796889/

10-16 21:14