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;
}
}
}