Перечисления не поддерживаются в Entity Framework. Алекс Джеймс предлагает обходной путь, но он довольно сложный.
Вместо этого я предпочитаю делать это:
public enum Gender : byte
{
Male = 1,
Female,
Unknown
}
public class Person
{
public int PersonId { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public byte Gender { get; set; } // this is the EF model property
public Gender GenderType // this is an additional custom property
{
get { return (Gender) Gender; }
set { Gender = (byte)value; }
}
}
Это в основном хук / обертка для фактического значения. В вашей базе данных храните Gender как tinyint
(что соответствует концептуальной стороне byte
).
Затем вы можете использовать байтовое перечисление для сопоставления со свойством модели:
return from p in _db.People
select new Model.Person
{
PersonId = p.PersonId,
LastName = p.LastName,
FirstName = p.FirstName,
Gender = p.Gender, // sets byte
};
Но тогда, если вы получите доступ к этой ViewModel, поскольку вы устанавливаете поле байта для Gender
, у вас также будет доступ к свойству enum GenderType
.
Решает ли это вашу проблему?