我在一个项目中使用 NHibernate 3,并且需要调用两个存储过程并以 DTO 结构返回结果。出于性能原因,我使用了 Future 查询,例如
var contractstaffroles = GetSession()
.CreateSQLQuery(string.Format("exec up_List_ContractStaffRole_By_Staff @staffId = :staffId"))
.SetParameter("staffId", staffId)
.SetResultTransformer(new AliasToBeanResultTransformer(typeof(ContractStaffRoleReadOnlyData)))
.Future<ContractStaffRoleReadOnlyData>().ToList();
var contractstaffroleperiods = GetSession()
.CreateSQLQuery(string.Format("exec up_List_ContractStaffRolePeriods_By_Staff @staffId = :staffId"))
.SetParameter("staffId", staffId)
.SetResultTransformer(new AliasToBeanResultTransformer(typeof (ContractStaffRolePeriodReadOnlyData)))
.Future<ContractStaffRolePeriodReadOnlyData>().ToList();
var cnt = contractstaffroles.Count();
第一个查询正确地从存储过程返回记录。但是,生成的 DTO 是空的,即没有设置属性设置器。当我删除 Future 关键字时,DTO 被正确填充......但这会导致在两个连接上对数据库进行两次调用。那么在 Nhibernate 中是否不能使用带有转换器的未来查询?