2011-08-29 1 views
22

Использование NHibernate 3.2 сопоставление по коду (не fluent-nhibernate), я пытаюсь отобразить поле Enum в строковый столбец вместо стандартного представления int. Я не могу получить правильный синтаксис.Отображение Перечисление как строка в 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); 

Update:

Используя это отображение, мне удалось получить его, чтобы сохранить в виде строки в БД, но теперь я получаю исключение при загрузке из БД в объектной модели.

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>>());