Используя отображение 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(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>(x => x.State);
Обновление:
Используя это сопоставление, мне удалось сохранить его как строку в БД, но теперь я получаю исключение при загрузке из БД в объект model.
map.Property (x => x.State, attr => {attr.Type (NHibernateUtil.String);});
Это исключение, которое я получаю при попытке загрузить объект:
Invalid Cast (check your mapping for property type mismatches); setter of Model.Account