namespace Framework.DataAccessLayer { using System; using System.Linq; /// /// Mapping from CSharp enum to value in sql table. /// [AttributeUsage(AttributeTargets.Field)] // Enum entry public class IdEnumAttribute : Attribute { public IdEnumAttribute(string idName) { this.IdName = idName; } /// /// Gets IdName. Value in sql table. /// public readonly string IdName; /// /// Returns IdName from enum. /// public static string IdNameFromEnum(Enum idEnum) { var enumType = idEnum.GetType(); var enumName = Enum.GetName(enumType, idEnum); var enumNameAttribute = enumType.GetField(enumName).GetCustomAttributes(false).OfType().Single(); return enumNameAttribute.IdName; } /// /// Returns enum from IdName. /// public static TEnum IdNameToEnum(string idName) where TEnum : Enum { TEnum result = default(TEnum); foreach (var item in Enum.GetValues(typeof(TEnum))) { string idNameLocal = IdNameFromEnum((TEnum)item); if (idNameLocal == idName) { result = (TEnum)item; break; } } return result; } } }