使用 NHibernate 部分填充子集合

2024-01-01

我已经为此苦苦挣扎了一段时间,似乎无法弄清楚......

我有一个BlogPost类,它有一个集合Comments,并且每个评论都有一个DatePosted field.

我需要做的是查询BlogPost并以部分加载的方式返回它Comments集合,说的是 2009 年 8 月 1 日发布的所有评论。

我有这个查询:

BlogPost post = session.CreateCriteria<BlogPost>()
    .Add(Restrictions.Eq("Id", 1))
    .CreateAlias("Comments", "c")
    .Add(Restrictions.Eq("c.DatePosted", new DateTime(2009, 8, 1)))
    .UniqueResult<BlogPost>();

当我运行此查询并查看生成的 sql 时,它首先针对BlogPost表,加入到Comment具有正确日期限制的表,然后仅在该表上运行第二个查询Comment返回所有内容的表。

结果是Comments的集合BlogPost班级完全满了!

我究竟做错了什么?

如果有人需要更多信息,我有代码示例......!


为此有一个结果转换器,请参阅文档。 http://knol.google.com/k/fabio-maulo/nhibernate-chapter-13/1nr4enxv3dpeq/16#13%282E%294%282E%29%28C2%29%28A0%29Associations

Quote:

请注意,小猫收藏品 由返回的 Cat 实例 前两个查询不是 按标准预先过滤!如果你 希望只找回那些小猫 符合条件,您必须使用SetResultTransformer(CriteriaUtil.AliasToEntityMap).

IList cats =
sess.CreateCriteria(typeof(Cat))
    .CreateCriteria("Kittens", "kt")
        .Add( Expression.Eq("Name", "F%") )
    .SetResultTransformer(CriteriaUtil.AliasToEntityMap)
    .List();

您还可以使用通过以下方式激活的过滤器session.EnableFilter(name).

有一个类似的问题在这里 https://stackoverflow.com/questions/1164371/how-to-query-a-subproperty-with-nhibernates-criteria-api-and-the-entity-to-load/1165840.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 NHibernate 部分填充子集合 的相关文章

随机推荐