Подтвердить что ты не робот

Перечисляет с EF code-first - стандартный метод для высева DB и затем с помощью?

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

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

4b9b3361

Ответ 1

Теперь поддерживается: 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. Вы можете использовать либо конструктор объектов в Visual Studio для моделирования объектов, имеющих свойства Enum, либо использовать рабочий процесс Code First для определения объектов с объектами Enum в качестве свойств. Вы можете использовать свойство Enum так же, как любое другое скалярное свойство, например, в запросах и обновлениях LINQ...

В Visual Studio есть несколько новых возможностей для конструктора Entity Framework:

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

Ответ 2

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

В упрощенном способе сопоставления перечислений в EF 4: просто создайте свойство int в своем классе, чтобы представить значение int для перечисления. Чтобы свойство, которое EF должно было отобразить, затем имеет свойство "mini wrapper", чтобы вы могли использовать перечисление.

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 - map enum wrapper как сложный тип p >