我有以下c#代码使用nhibernate执行存储过程,但是有一个问题将查询结果转换为适当的对象,因为表上的一个ID属性是实体上的一个对象(列名是' BusinessId'但是它的实体属性类型为' Business',因此它将是' Business.BusinessId'。如何正确转换它?
const string sql = "exec dbo.usp_StoredProc";
var query = CurrentSession.CreateSQLQuery(sql)
.SetResultTransformer(new AliasToBeanResultTransformer(typeof(CertificationOfInsuranceEntity)));
return query.List<CertificationOfInsuranceEntity>().ToList();
实体:
public class CertificationOfInsuranceEntity
{
public virtual int CertificationOfInsuranceId { get; set; }
public virtual BusinessEntity Business { get; set; }
public virtual string InsuranceType { get; set; }
}
表:
CertificationOfInsuranceId int,
BusinessId int,
InsuranceType varchar
澄清一下,当我执行此操作时,我收到一条错误消息,指出“无法找到属性的商家&#39; BusinessId&#39;在课堂上......&#39;
答案 0 :(得分:1)
从CertificationOfInsuranceEntity定义,它似乎是一个已映射的实体。在这种情况下,您应该使用AddEntity而不是AliasToBeanResultTransformer - 区别在于AddEntity旨在映射到映射的实体,而AliasToBeanResultTransformer(主要)用于普通的ad-hoc DTO http://nhibernate.info/doc/nhibernate-reference/querysql.html。
以下代码应检索正确的结果:
var query = CurrentSession.CreateSQLQuery(sql)
.AddEntity(typeof(CertificationOfInsuranceEntity));