Перечисления с EF code-first - стандартный метод для заполнения базы данных, а затем с помощью? - PullRequest
34 голосов
/ 14 июня 2011

Существует ли стандартный способ использования Enums в EF-коде в первую очередь?Кажется, есть некоторые примеры, использующие класс-оболочку для перечисления.

Однако я хотел бы иметь возможность определить перечисление и сделать так, чтобы значения перечисления также вносились в базу данных с помощью инициализатора базы данных.Похоже, нет смысла определять перечисление и создавать оболочку, если мне придется вручную заполнять таблицу базы данных из перечисления.

Ответы [ 3 ]

71 голосов
/ 14 июня 2011

К сожалению, enums изначально не поддерживается в EF 4.1. Вот одна довольно известная статья о том, как с ними бороться: Поддельные перечисления на EF 4 . Однако для этого требуется обертка.

Однако в EF 4 существует более простой способ отображения перечислений: просто создайте свойство int в своем классе, чтобы представить значение int для перечисления. Это свойство, которое EF должен отобразить, а затем иметь свойство «мини-оболочки», позволяющее использовать перечисление.

public class Appointment 
{   
    public int ID { get; set; }
    public string Description { get; set; }

    // This property will be mapped
    public int DayOfWeekValue { get; set; }

    public DayOfWeek Day
    {
        get { return (DayOfWeek) DayOfWeekValue; }
        set { DayOfWeekValue = (int) value; }
    }
}

public enum DayOfWeek
{
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
}

При создании базы данных EF с радостью проигнорирует любой тип, который он не умеет отображать, но свойство int будет отображено.

Примечание: Это взято непосредственно из моего ответа на другой enum и EF вопрос: EF 4.1 Code First - отобразить упаковку перечисления как сложный тип

19 голосов
/ 20 октября 2011

Теперь поддерживается: http://blogs.msdn.com/b/adonet/archive/2011/06/30/announcing-the-microsoft-entity-framework-june-2011-ctp.aspx

Microsoft Entity Framework Июнь 2011 CTP представляет новые функции времени выполнения и времени разработки. Вот некоторые из новых функций времени выполнения:

  • Тип данных Enum теперь доступен в Entity Framework. Вы можете использовать либо Entity Designer в Visual Studio для моделирования объектов, имеющих свойства Enum, либо использовать рабочий процесс Code First для определения объектов, которые имеют объекты Enum в качестве свойств. Вы можете использовать свое свойство Enum, как и любое другое скалярное свойство, например, в запросах и обновлениях LINQ ...

В Visual Studio есть несколько новых функций для Entity Framework Designer:

  • Entity Designer теперь поддерживает создание Перечислений, пространственных типов данных и функций табличных значений с поверхности конструктора ...
0 голосов
/ 18 октября 2012

Написал пост об этом.Вы можете использовать Code First Migrations, чтобы добавить значения enum в базу данных.Смотрите здесь: http://linqto.net/blog/2012/10/entity-framework-code-first-and-enum-support/

...