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

本文关键字:ID C#NHIbernate 转换器 Object 映射 用于 | 更新日期: 2023-09-27 18:22:14

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

为了澄清,当我执行此操作时,我收到一个错误,说明"在类中找不到属性BusinessId的setter…"

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

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

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

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