2011-08-29 124 views
22

通過代碼(而不是流利nhibernate)使用NHibernate 3.2映射,我試圖將Enum字段映射到字符串列而不是默認的int表示。我無法得到正確的語法。在代碼中映射Enum作爲字符串NHibernate 3.2映射代碼

例如:

public class Account { 
     public enum StateType { Pending, Active, Cancelled, Suspended } 
     ... 
     public virtual StateType State { get; set; } 
     ... 
    }

在XML映射,您可以使用NHibernate.Type.EnumStringType(見this link),但我怎麼用代碼做它在映射?

NHibernate.Mapping.ByCode.ModelMapper mapper = new NHibernate.Mapping.ByCode.ModelMapper(); 

    mapper.Class<Account>(map => { 
     map.Id(x => x.Id, attr => { 
      attr.Column("id"); 
      attr.Generator(NHibernate.Mapping.ByCode.Generators.Identity); 
     }); 
     // Default 'int' mapping 
     //map.Property(x => x.State); 

     // Cannot implicitly convert type 'StateType' to 'NHibernate.Type.EnumStringType' 
     //map.Property<NHibernate.Type.EnumStringType<Account.StateType>>(x => x.State); 

更新:

使用這種映射,我設法得到它保存爲一個字符串到數據庫,但是從DB加載到對象模型時,我現在得到一個異常。

map.Property(x => x.State, attr => { attr.Type(NHibernateUtil.String); });

這是我得到的異常嘗試加載對象時:

Invalid Cast (check your mapping for property type mismatches); setter of Model.Account 

回答

26

明白了!以下語法的工作原理如下:

map.Property(x => x.State, attr => attr.Type<NHibernate.Type.EnumStringType<Account.StateType>>());

相關問題