понедельник, 20 июня 2011 г.

Использование enum в NHibernate

Есть задача: использовать типы данных enum для связывания с данными колонки таблицы с использованием NHibernate.

Создаем перечисление:

public enum ExportImportEnum : byte {
Import = 1,
Export = 2

}

Реализуем класс для получения данных. Он должен быть унаследован от NHibernate.Type.EnumStringType .

public class ExportImportEnumType : EnumStringType <ExportImportEnum>
{
public ExportImportEnumType()
: base ()
{

}
public override object GetValue(object code)
{
return (ExportImportEnum)code == ExportImportEnum.Import ? "I" : "E";
}
}

Перегрузка метода object GetValue(object code) позволяет возвращать в БД значения в зависимости от введеных данных.
Перегружаем также метод GetInstatce(object code) чтобы реализовать обратное приведение, из БД в объект.

public override object GetInstance(object code)
{

return (string)code == "I" ? ExportImportEnum.Import : ExportImportEnum.Export;
}

Настраиваем связывание.

Map(x => x.EI, "EI").Length(1).CustomType<ExportImportEnumType>();