Подтвердить что ты не робот

Отображение Перечисление как строка в NHibernate 3.2 отображение по коду

Используя отображение NHibernate 3.2 по коду (не fluent-nhibernate), я пытаюсь отобразить поле Enum в столбце строки вместо стандартного представления int. Я не могу получить правильный синтаксис.

Например:

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

В XML-сопоставлении вы можете использовать NHibernate.Type.EnumStringType (см. эта ссылка), но как это сделать при сопоставлении кода

    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
4b9b3361

Ответ 1

Получил! Работает следующий синтаксис:

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