nHibernate - 父母和子集合的列表

时间:2013-12-07 11:05:07

标签: c# nhibernate nhibernate-mapping

我有这个架构:

enter image description here

我已经在PostTag之间完成了ManyToMany映射。我想要实现的是获取帖子列表和每个帖子的子标签集合。所以它可以这样显示:

enter image description here

到目前为止,我所做的是:

IList<Post> results = base._session.CreateCriteria(typeof(Post))
    .SetFetchMode("User", FetchMode.Eager)
    .SetFetchMode("Votes", FetchMode.Eager)
    .AddOrder(Order.Desc("_dateCreated"))
    .ToList();

但是对于每个Post,它都需要额外的1个SQL来获取Votes。 有没有办法一次性获取它?

1 个答案:

答案 0 :(得分:1)

这种情况下的解决方案可能/应该是批量提取。在这里:19.1.5. Using batch fetching您可以找到更多详细信息。

您必须使用属性batch-szie="25"标记您的馆藏和/或实体。

的xml:

<bag name="Tags" ... batch-size="25">
...

流利:

HasManyToMany(x => x.Tags)
  ...
  .BatchSize(25)

那仍然会执行一些SQL Select语句,而不仅仅是一个,但是你获得的灵活性会很大。

在这里,我试图解释为什么批量提取是正确的方法:NHibernate QueryOver with Fetch resulting multiple sql queries and db hits

最后,我们可以使用简单查询(非显式提取),因为batch-size将减少为获得所有需要的延迟加载而发出的SQL语句数量......

相关问题