2012-06-21 72 views
1

我试图将enum字段映射到dto属性。我使用PositionalToBeanResultTransformer,这样的事情:NHIbernate SQLQuery和枚举

PositionalToBeanResultTransformer trans = new PositionalToBeanResultTransformer(typeof(DTOClass), new string[] { "Id", "EnumProperty" }); 
var data = Sesion.CreateSQLQuery("SELECT Id, EnumField FROM Table") 
     .AddScalar("EnumField", NHibernateUtil.Custom(typeof(Enumerador))) 
     .SetResultTransformer(trans) 
     .List<DTOClass>(); 

public class DTOClass 
{ 
    public int Id { get; set; } 
    public Enumerador EnumProperty { get; set; } 
} 

的DTOClass没有映射,所以我不能用AddEntity()和代码AddScalar()抛出,我必须实现NHibernate.UserTypes.IUserType错误。 如何将数据库的字符串字段转换为SQLQuery中的枚举?

在此先感谢您的帮助。

+0

您是使用hbm还是fluent进行映射。 –

+0

DTOClass未映射。 – Ariel

回答

0

如果你不使用自动映射,在你的类映射添加类似的一行象下面这样:

Table("MyClass"); 
Id(x => x.Id).GeneratedBy.Identity(); 
Map(x => x.Type).CustomType(typeof(Enumerations.MyType)); 

public virtual int Id { get; set; } 
public virtual Enumerations.MyType Type { get; set; } 

我通常存储我的枚举作为DB和类映射整数将相应地映射回枚举。

+0

DTOClass未映射,这就是我使用PositionalToBeanResultTransformer的原因。 – Ariel