使用 NHibernate 将聚合与实体一起投影
Posted
技术标签:
【中文标题】使用 NHibernate 将聚合与实体一起投影【英文标题】:Projecting aggregates together with Entity using NHibernate 【发布时间】:2010-10-26 23:38:48 【问题描述】:我有一个非常标准的 Orders 表和一个关联的 OrderRows 表,比如:
Orders
[id] INTEGER
[name] ...
OrderRows
[orderId] INTEGER
[quantity] INTEGER
[unitPrice] SMALLMONEY
[description] VARCHAR(...)
在某些情况下,我想检索订单列表以及总计摘要,但大多数时候我并不关心摘要。
使用 Criteria API,我可以为每个订单创建 [数量]*[单位价格] 的投影,但是如何在同一结果集中同时获得订单和投影?
【问题讨论】:
【参考方案1】:您可以在实体中计算 Total 并将其存储在数据库中(如果您不想每次都加载所有行)。
【讨论】:
【参考方案2】:我相信这里的解决方案是创建一个 DTO 类,然后将其用作结果转换。
public class OrderDTO
int Id;
// Rest of Orders properties you want
int LineTotal; // [quantity]*[unitPrice]
public OrderDTO(int id, /* rest of constructor parameters */);
session.CreateCriteria(typeof(... /* criteria query here */))
.SetResultTransformer(new AliasToBeanConstructorResultTransormer(typeof(OrderDTO).GetConstructors()[0]));
【讨论】:
以上是关于使用 NHibernate 将聚合与实体一起投影的主要内容,如果未能解决你的问题,请参考以下文章
在 NHibernate 中,我可以使用工厂来构建复杂的聚合对象(实体)吗?
将 GUID 与 SQL Server 和 NHibernate 一起使用