Я бы не стал этого делать, потому что ваше объявление Enum не является динамическим или более простым, оно не меняется без перекомпиляции, в то время как ваша таблица поиска может измениться в любой момент.Если значения Enum и таблицы поиска не совпадают, что дальше?
Другая причина в том, что если вы измените Enum (в коде), вам придется синхронизировать его с таблицей базы данных.Поскольку у Enums нет инкрементного ключа (PK), их нельзя так просто синхронизировать.Допустим, вы удалили один член Enum из своего кода и перекомпилировали его, что должно произойти?А если вы измените значение?
Надеюсь, я ясно изложил свои возражения против этого подхода.Поэтому я настоятельно рекомендую сохранить имя или значение ваших членов enum.Чтобы сохранить его по имени, просто сопоставьте его следующим образом:
public class MemberMap : ClassMap<Member>
{
Map(x => x.MembershipLevel, "level")
.CustomType<GenericEnumMapper<Level>>()
.Not.Nullable();
}
Чтобы сохранить значения, сделайте так, как @Lachlan написал в своем ответе.
Или, если вам действительно нужна таблица поиска и вычтобы использовать Enum со строгой проверкой, создайте нормальную модель с PK (или используйте для этого значение), KEY и VALUE .Создайте свой enum со своими статическими членами и заставьте приложение запрашивать базу данных для имен и значений при его запуске.Если вещи не совпадают, делайте все, что вам нужно.Кроме того, это не гарантирует, что ваша таблица не изменится во время работы вашей программы, поэтому лучше быть уверенным, что она не изменится.