我在项目中使用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是空的,即没有设置属性设置器。当我删除未来关键字时,DTO正确填充...但这导致在两个连接上对数据库进行两次调用。因此,在Nhibernate中使用变换器的未来查询是不可能的?