Я интенсивно использую таблицы (со значениями по умолчанию) в БД вида
CREATE TABLE [dbo].[CommunicationPreferences]
(
[ID] smallint NOT NULL,
[SystemName] nvarchar(50) NOT NULL,
[Description] nvarchar(200) NOT NULL,
)
И я вожу свои сущности EF4 из БД.
N.B. Я не использую никакие представления, функции SPROCS или SQL, никакие сложные типы EF, только прямое отображение таблицы на сущность. Затем расширьте мои частичные классы сущностей, чтобы добавить дополнительную функциональность, чтобы сохранить вещи СУХОЙ.
Для Enums у меня есть простой шаблон T4, который я передаю список таблиц (в форме выше), файл .tt запускается всякий раз, когда я обновляю модель EF из БД (или, если мне нужно по требованию) ), он захватывает данные и создает Enums, например
/// <summary>
/// Enums For The dbo Schema
/// </summary>
public enum CommunicationPreferencesList : short
{
/// <summary>
/// HTML Emails
/// </summary>
[EnumTextValue(@"HTML Emails")]
HTMLEmail = 1,
/// <summary>
/// Plain Text Emails
/// </summary>
[EnumTextValue(@"Plain Text Emails")]
PlainEmail = 2,
/// <summary>
/// Mobile Telephone
/// </summary>
[EnumTextValue(@"Mobile Telephone")]
Mobile = 3,
/// <summary>
/// Landline Telephone
/// </summary>
[EnumTextValue(@"Landline Telephone")]
Landline = 4,
/// <summary>
/// SMS
/// </summary>
[EnumTextValue(@"SMS")]
SMS = 5,
}
Тогда, когда я имею дело со столбцом FK ID / Свойством для некоторой сущности, например,
Users.CommunicationPreferenceID
Я просто приведу ID или перечисление для сравнения. например,
CommunicationPreferencesList usersPreference = (CommunicationPreferencesList)currentUser.CommunicationPreferenceID;
if(usersPreference == CommunicationPreferencesList.SMS)
{
//send SMS
}
else if(usersPreference == CommunicationPreferencesList.Mobile)
{
//ring the phone
}
У меня есть несколько простых помощников, например, дать EnumTextValue из экземпляра enum, например
string chosenMethod = EntityHelper.GetEnumTextValue(CommunicationPreferencesList.Mobile);
=> "Mobile Telephone"
Я нахожу это простым, беспроблемным, прозрачным, простым в использовании, и для моих целей это доставляет удовольствие, и я счастлив. Я не вижу необходимости полностью маскировать числовое значение в БД / сущности из потребляющего кода, я очень рад преобразовать одно или другое из значений и в итоге получаю довольно чистый читаемый код, плюс приятный маленький дополнительный EnumTextValue, который генерируется из поля [Description] в БД.