Перечисляет с EF code-first - стандартный метод для высева DB и затем с помощью?
Существует ли стандартный способ использования Enums в коде EF? Кажется, что некоторые примеры используют класс-оболочку для перечисления.
Однако я хотел бы иметь возможность определять перечисление и иметь значения перечисления, также засеянные в базу данных с помощью инициализатора базы данных. Кажется, что нет большого смысла в определении перечисления и создании обертки, если мне нужно вручную вынести таблицу базы данных из перечисления.
Ответы
Ответ 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 >
Ответ 3
Я написал сообщение об этом. Вы можете использовать First First Migrations для добавления своих значений перечисления в базу данных. Смотрите здесь: http://linqto.net/blog/2012/10/entity-framework-code-first-and-enum-support/