用于 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));
我有以下使用 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));