如何使枚举类型的属性,当我不使用POCO's,但EF生成的模型类
本文关键字:EF 模型 属性 类型 枚举 何使 POCO | 更新日期: 2023-09-27 18:12:41
我有一个名为DynamicControl
的表。它有一个名为ControlType
的属性,它是SQL Server 2008数据库中的nvarchar(255)
。
在代码中,我希望属性值是一个字符串,但它的字符串值必须来自枚举的字符串表示,如下所示:
public enum ControlType
{
TextBox,
TextArea,
Password,
RadioButton,
Checkbox,
DropDownList,
MultiSelectList,
DatePicker,
TimePicker,
DateTimePicker
}
我该怎么做?
我忘了添加一些重要的信息,但没有提供,这可能听起来像一个愚蠢的问题。问题是:我没有使用POCO。我受限于使用实体框架生成的模型类。如果我正在编写POCO,我只需将数据类型更改为enum即可。但是,由于我使用的是生成的模型,这样做将导致EDMX标记和模型类之间的差异。
更新我的问题是,我如何告诉实体框架在EDMX中生成正确的标记,以便所述属性是类型ControlType enum而不是字符串或Int32?
因此,我的问题是而不是如何将enum转换为字符串,反之亦然
简单地定义你的属性类型为你的enum(即:ControlType)
。net框架中的枚举类有许多Static成员函数来帮助您。假设您从数据库获取nvarchar值到名为dbCtrlType的字符串变量中,那么
public ControlType ControlTypeEnum
{
get { return (ControlType)Enum.Parse(typeof(ControlType), dbCtrlType); }
set { dbCtrlType = dbCtrlType.ToString(); }
}
如果我得到了正确的,那么你需要做一些类似的微调
using System;
using System.ComponentModel;
namespace ConsoleApplication1
{
public enum ControlDefaultClass
{
[Description("This is some string which you wanted to show")] MemberA,
[Description("This is some other string which you wanted to show")] MemberB,
}
public class ConsoleApp
{
private static void Main(string[] args)
{
Console.WriteLine(GetDescription(ControlDefaultClass.MemberA)); //This line will print - This is some string which you wanted to show
Console.WriteLine(GetDescription(ControlDefaultClass.MemberB));//This line will print - This is some other string which you wanted to show
Console.Read();
}
public static string GetDescription(Enum value)
{
var fieldInfo = value.GetType().GetField(value.ToString());
var attributes =
(DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
return attributes.Length > 0 ? attributes[0].Description : value.ToString();
}
}
}