Entum Framework Enum и ассоциация строк

c# entity-framework entity-framework-6

Вопрос

Я хочу использовать метод в этой статье для реализации более дружественных результатов ToString () для моих типов перечислений. Я хотел бы знать, как это можно сделать в автоматических сгенерированных кодах Enum Framework? Должен ли я изменить шаблон генерации кода (если это так, может кто-то любезно дать мне некоторое руководство, поскольку шаблон довольно сложный), или может кто-то предложить альтернативный метод?

Благодаря!

Принятый ответ

Вы можете использовать свой собственный тип перечисления в своей модели EF, вместо того, чтобы создавать новое перечисление в модельном дизайнере. Вот как:

В модельном дизайнере щелкните по поверхности и выберите:

Добавить новый -> Тип перечисления ...

В диалоговом окне установите флажок:

Справочный внешний тип

и введите свой тип: namespace.MyEnum

Затем создайте столбцы в своих таблицах, чтобы использовать этот тип.

Поскольку вы, вероятно, собираетесь модифицировать существующую модель, убедитесь, что между типом перечисления и моделью (внешним) перечислением нет кода вашего кода. Лучший подход - удалить тип перечисления, который вы ранее создали в модели, и настроить столбцы для использования связанного типа перечисления из вашего кода.

Теперь вы можете объявить свой тип перечисления с атрибутами описания, как вы планировали.


Популярные ответы

Вам не нужно делать обходные пути для перечислений. Они поддерживаются в последней платформе Entity Framework.

Чтобы сделать ваши enum дружественными к вашему сайту, вы можете использовать атрибуты. Вот пример атрибута:

public class EnumDescription : Attribute
{
    public string Text { get; private set; }

    public EnumDescription(string text)
    {
        this.Text = text;
    }
}

Отметьте свои перечисления атрибутом:

public enum DaylightSavingTime
{
    [EnumDescription("Detect automatically")]
    Auto = 0,
    [EnumDescription("DST always on")]
    AlwaysOn = 1,
    [EnumDescription("DST always off")]
    AlwaysOff = 2
}

Добавьте расширения, чтобы включить ToDescription() :

public static class EnumExtensions
{
    public static string ToDescription(this Enum enumeration)
    {
        Type type = enumeration.GetType();
        MemberInfo[] memInfo = type.GetMember(enumeration.ToString());

        if (null != memInfo && memInfo.Length > 0)
        {
            object[] attrs = memInfo[0].GetCustomAttributes(typeof(EnumDescription), false);
            if (null != attrs && attrs.Length > 0)
                return ((EnumDescription)attrs[0]).Text;
        }

        return enumeration.ToString();
    }
}

Применение:

var blabla = DaylightSavingTime.Auto;
Console.WriteLine(blabla.ToDescription());

Вывод:

Автоматическое обнаружение



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему