2011-08-29 7 views
22

코드로 NHibernate 3.2 매핑을 사용하면 (Fluent-nhibernate가 아님), Enum 필드를 기본 int 표현 대신 문자열 열로 매핑하려고합니다. 나는 올바른 구문을 얻을 수 없다.코드로 NHibernate 3.2 맵핑에서 문자열로 enum 매핑

예를 들어

:

는 XML 매핑에서
public class Account { 
     public enum StateType { Pending, Active, Cancelled, Suspended } 
     ... 
     public virtual StateType State { get; set; } 
     ... 
    }

, 당신이 사용할 수있는 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에 문자열로 저장 얻기 위해 관리하지만, 객체 모델로 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>>());