#fluent-nhibernate #enums #guid
#fluent-nhibernate #перечисления #guid
Вопрос:
Я изучаю проект с использованием nhibernate, и у меня есть вопрос о том, как наилучшим образом реализовать следующий сценарий, используя FluentNHibernate 1.0.0.593 и NHibernate 2.1.0.4000
Мои таблицы выглядят следующим образом:
DeviationLog:
Id uniqueidentifier
DeviationType uniqueidentifier
IncomingMessageId uniqueidentifier
DeviationType:
Id uniqueidentifier
DeviationTypeCategory uniqueidentifier
DeviationMessage nvarchar(255)
DeviationTypeCategory:
Id uniqueidentifier
DeviationTypeCategoryName nvarchar(255)
В настоящее время я использую автоматическое отображение с соглашениями.
Когда я создаю экземпляр Deviation, я хотел бы иметь возможность делать что-то вроде следующего:
var deviation = new Deviation{DeviationType=DeviationEnum.NoMatchMobileNumber};
Теперь, насколько я знаю, перечисления поддерживают только целые типы, так что это не сработает без альтернативного подхода. Я думал о том, чтобы, возможно, использовать словарь для этого, например Dictionary<DeviationEnum,Guid>
, и я также подозреваю, что мне может понадобиться использовать UserTypeConvention<T>
, чтобы как-то заставить это работать.
У кого-нибудь есть опыт, которым можно поделиться?
Ответ №1:
Что я традиционно делал, так это использовал пользовательский класс IUserType, который переводил бы между рассматриваемым перечислением и тем, как оно будет сохраняться. Однако для этого требовался пользовательский IUserType для каждого типа перечисления.
Комментарии:
1. Не могли бы вы вставить пример или указать на некоторые другие ресурсы, которые могли бы быть полезны?
2. Я бы посмотрел на исходный код NHibernate для YesNoType, который имеет аналогичную функцию, чтобы превратить bool в «Yes» или «No» в строковом поле, чтобы сохранить его. Учитывая количество различных перечислений, которые у меня были, я в конечном итоге создал абстрактный класс, так что у каждого перечисления был просто подкласс, в котором были сопоставления.