Хранить имена перечислений в базе данных с помощью Entity Framework

public enum Currency
  {
     EUR = 1,
     USD = 2,
     GBP = 3
   }

Скажем, у меня есть перечисление, как показано выше. Если бы я использовал это, используя Entity Framework (сначала код), значения int будут сохранены в базе данных. Таблица поиска не хранится или имена строк значений перечисления, что затрудняет прямое чтение данных базы данных.

Есть ли способ получить EF для создания таблицы поиска для перечислений?

Ответ 1

Вы можете попробовать что-то вроде этого, что проще...

public enum Currency
{
    EUR = 1,
    USD = 2,
    GBP = 3
}

public class YourClassName
{
    [Column("Currency")]
    public string CurrencyString
    {
        get { return Currency.ToString(); }
        private set { Currency = EnumExtensions.ParseEnum<Currency>(value); }
    }

    [NotMapped]
    public Currency Currency;
}

public class EnumExtensions
{
    public static T ParseEnum<T>(string value)
    {
        return (T)Enum.Parse(typeof(T), value, true);
    }
}

источник: пример Брайана Хогана

Ответ 2

Да, есть. Вам нужно будет добавить таблицу в свою конфигурацию, а затем обязательно залейте значения, которые вы хотите в таблицу, используя отражение. Впоследствии просто создайте связь FK между таблицей поиска и любыми таблицами, в которых вы используете свои перечисления, и вы должны быть установлены.

Хороший пример кодирования этого в этот пост. Это может помочь вам начать работу.