C#NHIbernate转换器,用于将ID列映射到Object.ID

时间:2015-11-17 18:23:30

标签: c# nhibernate fluent-nhibernate nhibernate-mapping

我有以下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;

1 个答案:

答案 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));