用于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…"
从CertificateOfInsuranceEntity的定义来看,它似乎是一个已经映射的实体。在这种情况下,您应该使用AddEntity而不是AliasToBeanResultTransformer——不同之处在于AddEntity被设计为映射到映射的实体上,而AliasToBeanResultTransformer(主要)用于普通的特定DTOhttp://nhibernate.info/doc/nhibernate-reference/querysql.html.
以下代码应检索正确的结果:
var query = CurrentSession.CreateSQLQuery(sql)
.AddEntity(typeof(CertificationOfInsuranceEntity));