如何使用可空属性转换DTO中的SQL查询?

时间:2013-12-26 20:21:09

标签: nhibernate

有这样的DTO:

public class CustomerDTO
{
     public int Id{get; set;}
     public int? Reference {get; set;}
}

我如何从

获取它
var q =_session.CreateSQLQuery("SELECT Id, Reference FROM customers")

如果我使用

q.SetResultTransformer(Transformers.AliasToBean<CustomerDTO>)

我得到以下异常:

  

NHibernate.PropertyAccessException:类型System.Int32不能   分配给System.Nullable`1 [System.Int32] setter类型的属性   of Customer.Reference

2 个答案:

答案 0 :(得分:3)

试试这个:

var customers = _session.CreateSQLQuery("SELECT Id, Reference FROM customers")
    .AddScalar("Id", NHibernateUtil.Int32)
    .AddScalar("Reference", NHibernateUtil.Int32)
    .SetResultTransformer(Transformers.AliasToBean<CustomerDTO>())
    .List<CustomerDTO>();

参考here

答案 1 :(得分:1)

我们必须映射一个可以为空的枚举,然后得到:

Object of type 'System.Int32' cannot be converted to type 'System.Nullable`1[ExampleEnumType]'.

修复是使用:

.AddScalar("EnumTypeSqlAlias", NHibernateUtil.Enum(typeof(ExampleEnumType)))