如何将枚举与数据库ID进行映射
这个问题在这里已经有了答案:
你并不需要任何特别的东西,你可以将你从数据库中得到的整数转换为你的枚举:
int valueFromDB = 4;
Days enumValue = (Days)valueFromDB;
我不会建议这种方法。 你需要一个查找表几天。 例如
create table Days(
DaysID INT PRIMARY KEY,
Name VARCHAR(20))
所有其他表将有一个DaysID的外键列。 我之所以反对你的方法是因为你将自己限制在可能改变的硬编码值上。
如果需要,可以将Days表加载到List<KeyValuePair<int, string>>
。 如果您按原样离开,没有人看数据库会知道DaysID 1,2,3,4等代表的方式。
我希望这有帮助。
使用下面的扩展方法来表示你的枚举
/// <summary>
/// Get the whilespace separated values of an enum
/// </summary>
/// <param name="en"></param>
/// <returns></returns>
public static string ToEnumWordify(this Enum en)
{
Type type = en.GetType();
MemberInfo[] memInfo = type.GetMember(en.ToString());
string pascalCaseString = memInfo[0].Name;
Regex r = new Regex("(?<=[a-z])(?<x>[A-Z])|(?<=.)(?<x>[A-Z])(?=[a-z])");
return r.Replace(pascalCaseString, " ${x}");
}
或者你可以提供描述来枚举下面使用它
public enum Manufacturer
{
[DescriptionAttribute("I did")]
Idid = 1,
[DescriptionAttribute("Another company or person")]
AnotherCompanyOrPerson = 2
}
/// <summary>
/// Get the enum description value
/// </summary>
/// <param name="en"></param>
/// <returns></returns>
public static string ToEnumDescription(this Enum en) //ext method
{
Type type = en.GetType();
MemberInfo[] memInfo = type.GetMember(en.ToString());
if (memInfo != null && memInfo.Length > 0)
{
object[] attrs = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attrs != null && attrs.Length > 0)
return ((DescriptionAttribute)attrs[0]).Description;
}
return en.ToString();
}
链接地址: http://www.djcxy.com/p/22517.html