2014-01-28 4 views
0

Привет, я новичок в POCO, и мне интересно, можно ли сопоставить таблицу как перечисление. Посмотрите мою простую схему:Тип таблицы для Enum в POCO EF

http://www.jonataspiazzi.xpg.com.br/outpost/diagram02.png

Таблица UserType представляет собой список типов, очень много, как тип перечисления в C# код. Поэтому я хочу сгенерировать класс, обладающий свойством типа enum.

Что-то вроде этого:

[Table("User")] 
public class User 
{ 
    public int UserId { get; set; } 

    public string Name { get; set; } 

    [ForeignKey("???")] 
    public UserType Type { get; set; } 
} 

[Table("UserType")] 
public enum UserType 
{ 
    [Description("Administrator")] 
    Administrator = 1, 

    [Description("Operator")] 
    Operator = 2, 

    [Description("Consultor")] 
    Consultor = 3 
} 

Возможна карта таблицы с некоторым кодом, как это?
* ps: этот код является неправильным, это всего лишь способ попытаться объяснить мой вопрос.

ответ

0

Нет, его невозможно. Entity должен быть ссылочным типом (enum - тип значения), и он должен иметь свойство id. Enum - это просто набор именованных констант. Нет свойства id.

Обход - вы можете сохранить целое значение в таблице User, который может быть сопоставлен с вашего перечисления:

public class User 
{ 
    public int UserId { get; set; } 
    public string Name { get; set; } 
    public UserType Type { get; set; } 
} 

public enum UserType 
{ 
    Administrator = 1, 
    Operator = 2, 
    Consultor = 3 
} 

Если вы используете EF 4, то вы должны создать целочисленное свойство в классе User для отображения на столбец базы данных, и свойство перечисления, которое не отображается, но рассчитывается с использованием целочисленного свойства:

[Column("UserType")] 
public int UserTypeValue { get; set; } 

[NotMapped] 
public UserType Type 
{ 
    get { return (UserType) UserTypeValue; 
    set { UserTypeValue = (int)value; 
} 
Смежные вопросы