У меня есть две похожие таблицы (Table1
, Table2
), поэтому я создал базовый абстрактный класс, который имеет общие свойства. В каждой таблице есть столбец с указанием статуса обработки записи. Я хотел бы сопоставить эти столбцы с одним перечислением:
enum RecordStatus
{
UnkownStatus,
NotProcessed,
Processed,
}
К сожалению, для каждой таблицы мне нужно сопоставить различные значения для перечислений.
Итак, я создал два конвертера (Table1StatusConverter
, Table2StatusConverter
), которые наследуются от EnumType<RecordStatus>
и настроены в сопоставлениях. Работает частично. Частично потому, что NHibernate использует только один конвертер в обоих классах.
Это ошибка или, может быть, она работает так, как описано в дизайне? Есть ли обходной путь для этого?
Редактировать: Я пишу код из памяти, потому что в тот момент, когда у меня нет к нему доступа
Сущность:
class abstract TableBase
{
public Guid Id { get; protected set; }
public string Sender { get; protected set; }
public DateTime ReceiveTime { get; protected set; }
public RecordStatus Status { get; set; }
}
class Table1 : TableBase
{
public string Message { get; set; }
}
class Table2 : TableBase
{
public ICollection Parts { get; protected set; }
}
Преобразователи: Table1StatusConverter и Table2StatusConverter переопределяют один и тот же метод, но по-разному.
class Table1StatusConverter : EnumType<RecordStatus>
{
public override object GetValue(object enumValue) { ... }
public override object GetInstance(object value) { ... }
}
Отображения:
Table1.hbm.xml
<class name="Table1" table="Table1">
..
<property name="Status" type="MyAssembly.Table1StatusConverter, MyAssembly" />
..
</class>
Table2.hbm.xml
<class name="Table2" table="Table2">
..
<property name="Status" type="MyAssembly.Table2StatusConverter, MyAssembly" />
..
</class>