Это можно сделать, но это требует небольшой жертвы на стороне базы данных. Entity Framework (5 и далее) поддерживает отображение поля для перечисления, но только для byte
, sbyte
, short
, ushort
, int
, uint
, long
или ulong
типов.
Предположим, что мы имеем следующий пример таблицы:
CREATE TABLE [People](
[id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
[Name] [varchar](50) NOT NULL,
[Title] [int] NOT NULL
)
Title
была объявлена как целое число. В реальной базе данных это может быть внешний ключ для таблицы TitleTypes
.
Кроме того, давайте предположим, что внешнее перечисление, что мы собираемся быть связывание в определяются как:
namespace Enumerations
{
public enum TitleEnum
{
Mr,
Mrs,
Dr,
None
}
}
Если мы импортируем People
таблицы в EDMX можно правая кнопка мыши на Title
колонки и Преобразовать в ENUM
Это вызовет диалоговое окно, что позволяет нам указать имя для перечисления в т он EDMX ModelStore, определить любые значения для перечисления ИЛИ ссылка на внешнее перечисление через Ссылка внешнего типа.
Дайте ему название типа TitleEnum
, отметьте Ссылка внешнего типа и введите Enumerations.TitleEnum
в соответствующем поле. Нажмите «ОК», и он свяжет столбец с внешним перечислением.
Примечание:
- Хотя оба называется TitleEnum, это действует как проходные к внешнему Перечислению
- Тип вашей колонки и внешнее перечисление должно соответствовать
Теперь, когда мы создаем нового человека, мы можем использовать перечисление, и оно будет переведено в его представление Int.
Data.ScratchEntities context = new Data.ScratchEntities();
Data.Person person = new Data.Person();
person.Name = "Jane Smith";
//Note the use of the external enumeration here
person.Title = Enumerations.TitleEnum.Mrs;
context.People.Add(person);
context.SaveChanges();
Ваш придется сделать некоторые дополнительные логики, чтобы получить, что вы могли бы положить, что в инкубаторе. – Botonomous
@ Дунбар, что вы имеете в виду? Можете быть более конкретными? –
Как и в настройщике свойств, задайте ли он не отображаемый экземпляр объекта, который вы действительно хотите установить. – Botonomous