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

C# NHIbernate transformer for ID column mapping to Object.ID

我有以下使用 nhibernate 执行存储过程的 c# 代码,但在将查询结果转换为适当的对象时遇到问题,因为 table 上的 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; }
}

Table:

   CertificationOfInsuranceId int,
   BusinessId int,
   InsuranceType varchar

澄清一下,当我执行此操作时,我收到一条错误消息,指出“无法在 class 中为 属性 'BusinessId' 找到 setter...”

从 CertificationOfInsuranceEntity 的定义来看,它似乎是一个已经映射的实体。在这种情况下,您应该使用 AddEntity 而不是 AliasToBeanResultTransformer——不同之处在于 AddEntity 旨在映射到映射的实体,而 AliasToBeanResultTransformer(主要)用于普通的临时 DTO http://nhibernate.info/doc/nhibernate-reference/querysql.html.

以下代码应该会检索到正确的结果:

var query = CurrentSession.CreateSQLQuery(sql)
     .AddEntity(typeof(CertificationOfInsuranceEntity));