NHibernate AliasToBeanResultTransformer&Collections
||
我想从我的数据层返回一个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可以很直接地/未来。
但是,当向用户显示音频项目时,我还想向用户显示其他3个选项:
天气他们已经将此音频项目添加到他们的收藏夹列表中
天气使这些音频“竖起大拇指”
如果登录用户是此音频所有者的“关注对象”,
Favourites : Audio -> HasMany -> AudioUserFavourites
Thumbs Up : Audio -> HasManyToMany -> UserAccount
Following Owner : Audio -> References -> UserAccount ->
ManyToMany-> UserAccount
希望这很有道理...如果不是,我将再次尝试......我如何急于为返回的每个Audio实体加载这些额外的详细信息...我也需要20页的所有这些信息。
我查看了批处理获取,但是这似乎是为每个Audio实体获取所有的赞,而不是检查是否只有登录的用户对其有支持。
抱歉逛逛:-)
保罗
没有找到相关结果
已邀请:
1 个回复
漂截嘘
和
集合来提取
对象,请访问Aydende Rahien的博客:http://ayende.com/blog/4367/eagerly-loading-entity-associations-ficiently -与-休眠。 您无需为此使用DTO。即使默认情况下延迟加载集合,您也可以获取带有集合的“ 3”列表。您将创建两个将来的查询;第一个将获取连接到标签的音频,第二个将获取连接到注释的音频。之所以起作用,是因为到第二个查询结果被处理时,会话高速缓存中已经有3个对象。 NHibernate从高速缓存中获取ѭ3instead而不是对其进行补水,然后填充第二个集合。 您不需要为此使用将来的查询;如果您只依次执行两个查询,它仍然有效,但是使用Futures只会导致数据库一次往返,从而使其更快。