gpt4 book ai didi

NHibernate AliasToBeanResultTransformer 和集合

转载 作者:行者123 更新时间:2023-12-04 20:48:01 24 4
gpt4 key购买 nike

我想从我的数据层返回一个 DTO,它也将包含子集合......例如:

Audio
- Title
- Description
- Filename
- Tags
- TagName
- Comments
- PersonName
- CommentText

到目前为止,这是一个基本查询,但我不确定如何将子集合从我的实体转换为 DTO。

var query = Session.CreateCriteria<Audio>("audio")
.SetProjection(
Projections.ProjectionList()
.Add(Projections.Property<Audio>(x => x.Title))
.Add(Projections.Property<Audio>(x => x.Description))
.Add(Projections.Property<Audio>(x => x.Filename))
).SetResultTransformer(new AliasToBeanResultTransformer(typeof(AudioDto)))
.List<AudioDto>();

这是否可能,或者是否有另一种推荐的方法?

更新:只想添加更多关于我的场景的信息......我想将音频项目列表返回给当前登录的用户以及一些相关实体,如标签,评论等......这些使用 MultiQuery 非常简单/ future 。

但是,当向用户显示音频项时,我还想向用户显示其他 3 个选项:

  • 他们是否已将此音频项目添加到他们的收藏夹列表中
  • 他们对这段音频“竖起大拇指”的天气
  • 天气登录用户正在“关注”此音频的所有者
Favourites : Audio -> HasMany -> AudioUserFavourites

Thumbs Up : Audio -> HasManyToMany -> UserAccount

Following Owner : Audio -> References -> UserAccount ->

ManyToMany -> UserAccount

希望这是有道理的...如果没有,我会再次尝试解释...我如何为返回的每个音频实体急切加载这些额外的详细信息...我还需要 20 页中的所有这些信息。

我查看了批量获取,但这似乎是为每个音频实体获取所有点赞,而不是检查是否只有登录用户点赞。

对不起,乱七八糟:-)

保罗

最佳答案

如果您想要获取包含 Tags 集合和 Comments 集合的 Audio 对象,请查看 Aydende Rahien 的博客: http://ayende.com/blog/4367/eagerly-loading-entity-associations-efficiently-with-nhibernate .

您不需要为此使用 DTO;你可以得到一个 Audio 列表及其集合,即使这些集合默认是延迟加载的。您将创建两个 future 的查询;第一个将获取加入标签的音频,第二个将获取加入评论的音频。它之所以有效,是因为在处理第二个查询结果时, session 缓存中已经包含了 Audio 对象; NHibernate 从缓存中获取 Audio 而不是重新水化它,然后填充第二个集合。

您不需要为此使用 future 的查询;如果您只是按顺序执行这两个查询,它仍然有效,但使用 futures 只会导致数据库往返一次,从而使其速度更快。

关于NHibernate AliasToBeanResultTransformer 和集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6359955/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com