Вам не нужно создавать обходные пути для перечислений. Они поддерживаются в последней платформе Entity Framework.
Чтобы сделать ваши перечисления дружественными на ваш сайт, вы можете использовать атрибуты. Ниже приведен пример атрибут:
public class EnumDescription : Attribute
{
public string Text { get; private set; }
public EnumDescription(string text)
{
this.Text = text;
}
}
Всех ваши перечисления с атрибутом:
public enum DaylightSavingTime
{
[EnumDescription("Detect automatically")]
Auto = 0,
[EnumDescription("DST always on")]
AlwaysOn = 1,
[EnumDescription("DST always off")]
AlwaysOff = 2
}
Добавить расширения для включения ToDescription()
метода:
public static class EnumExtensions
{
public static string ToDescription(this Enum enumeration)
{
Type type = enumeration.GetType();
MemberInfo[] memInfo = type.GetMember(enumeration.ToString());
if (null != memInfo && memInfo.Length > 0)
{
object[] attrs = memInfo[0].GetCustomAttributes(typeof(EnumDescription), false);
if (null != attrs && attrs.Length > 0)
return ((EnumDescription)attrs[0]).Text;
}
return enumeration.ToString();
}
}
Использование:
var blabla = DaylightSavingTime.Auto;
Console.WriteLine(blabla.ToDescription());
Выхода :
Detect автоматически
Что вы подразумеваете под "auto generated Enum codes"? Вы говорите об использовании подхода «model/DB first»? – Floremin
Это охватывает поддержку enum для первого подхода к базе данных EF: http://stackoverflow.com/questions/17731557/enum-support-fority-framework-database-first Посмотрите альтернативные ответы, а также на дополнительные ссылки , – Floremin
@Floremin: Да, я сначала использую модель. Таким образом, вся моя модель выполняется через дизайнера, включая мои типы перечислений. Поэтому классы, содержащие декларации перечислений, автоматически генерируются EF T4.Теперь проблема в том, что мои перечисления трудно использовать на моем веб-сайте ASP.net из-за ограниченного наименования типа перечисления, сценарий, описанный именно в связанной статье, в которой автор использовал DescriptionAttribute (отражение), чтобы обойти вопрос. Я не думаю, что это можно сделать в EF, но без обширной модификации шаблона T4, поскольку код автогенерируется? –