我正在寻找一种更好的方法来构建我的应用程序,以便我可以使用实体框架使用枚举,以及需要使用TSQL的情况,例如存储过程,公用表表达式等。使用它看起来很棒linq到实体方面,但在TSQL方面,它看起来不太好,例如在投影结果时你想要枚举字符串值。我已经看过EF enum支持教程here和其他例子来自网络和SO和我似乎无法找到一种标准的方式
教程here
中的部分代码public enum DepartmentNames
{
English,
Math,
Economics
}
public partial class Department
{
public int DepartmentID { get; set; }
public DepartmentNames Name { get; set; }
public decimal Budget { get; set; }
}
我的问题列表是:
例如
public class SomeStateType
{
public int SomeStateTypeId { get; set; }
public string Name { get; set; }
public enum Type
{
State1 = 1,
State2 = 2,
}
}
答案 0 :(得分:1)
我的代码中有一些枚举。
English, Math, Economics
分别代表数字0,1,2
。public Type *name of your property*
答案 1 :(得分:1)
在该示例中,枚举的整数值存储在数据库中,而不是字符串中。 EF将整数值映射到枚举值。 就个人而言,我更喜欢显式地为枚举的每个值编号,但不要将枚举嵌套在db模型类中 - 原因是你可能希望能够在其他地方使用枚举来检查数据库对象的“状态”
//Model
public class Course
{
public int ID { get; set; }
public CourseTypes CourseType { get; set; }
//stuff omitted
}
public enum CourseTypes
{
[Description("Training")]
Training = 1,
[Description("Awareness Only")]
AwarenessOnly = 2
//etc
}
我使用了一个帮助方法(我在SO上找到了,但没有正确信用的链接,对不起)来获取枚举的描述属性,以便我可以在需要时有一个可呈现的字符串,而不是名称属性。
public static string GetEnumDescription<TEnum>(TEnum value)
{
FieldInfo fi = value.GetType().GetField(value.ToString());
DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
if ((attributes != null) && (attributes.Length > 0))
return attributes[0].Description;
else
return value.ToString();
}