[英]NHibernate Linq and DistinctRootEntity
When I execute the following query, I get an exception telling me that 'feedItemQuery' contains multiple items (so SingleOrDefault doesn't work). 当我执行以下查询时,我得到一个异常,告诉我'feedItemQuery'包含多个项目(因此SingleOrDefault不起作用)。
This is expected behaviour when using the Criteria api WITHOUT the DistinctRootEntity transformer, but when using linq, I expect to get a single root entity (FeedItem, with the property Ads (of ICollection) containing all Ads). 当使用Criteria api而没有DistinctRootEntity转换器时,这是预期的行为,但是当使用linq时,我希望得到一个单一的根实体(FeedItem,其属性Ads(of ICollection)包含所有广告)。
Is there a way to tell NHibernate.Linq to use the DistinctRootEntity transformer? 有没有办法告诉NHibernate.Linq使用DistinctRootEntity转换器?
My query: 我的查询:
var feedItemQuery = from ad in session.Linq<FeedItem>().Expand("Ads")
where ad.Id == Id
select ad;
var feedItem = feedItemQuery.SingleOrDefault(); // This fails !?
The mapping: 映射:
<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>
Thanks in advance 提前致谢
You can use the RegisterCustomAction method to set the result transformer: 您可以使用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
var feedItemQuery = from ad in session.Linq().Expand("Ads") var feedItemQuery =来自session.Linq()中的广告。展开(“广告”)
where ad.Id == Id 其中ad.Id == Id
select ad**.FirstOrDefault();** 选择广告**。FirstOrDefault(); **
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.