Ответ 1
Это можно сделать, но это требует небольшой жертвы на стороне базы данных. 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, определить любые значения для перечисления OR для внешнего перечисления с помощью Reference external type.. p >
Дайте ему имя типа 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();