当我不使用POCO但EF生成的模型类时,如何创建枚举类型的属性?

时间:2013-05-07 13:08:49

标签: c# entity-framework entity-framework-4 entity-framework-5

我有一张名为DynamicControl的表格。它有一个名为ControlType的属性,在SQL Server 2008数据库中为nvarchar(255)

在代码中,我希望属性值是一个字符串,但它的字符串值必须来自枚举的字符串表示,如下所示:

public enum ControlType
{
    TextBox,
    TextArea,
    Password,
    RadioButton,
    Checkbox,
    DropDownList,
    MultiSelectList,
    DatePicker,
    TimePicker,
    DateTimePicker
}

我该怎么做?

更新 我忘了添加一些重要的信息,但没有提供哪些,这可能听起来像一个愚蠢的问题。这一点是:我没有使用POCO。我受遗留约束使用Entity Framework生成的模型类。如果我正在编写POCO,我只需将数据类型更改为枚举。但是,由于我使用生成的模型,这样做会导致EDMX标记和模型类之间的差异。

更新我的问题是,如何告诉Entity Framework在EDMX中生成正确的标记,以便所述属性的类型为ControlType枚举而不是字符串或Int32?

因此,我的问题是 如何将枚举转换为字符串,反之亦然

3 个答案:

答案 0 :(得分:0)

只需将您的属性定义为枚举类型(即:ControlType)

即可

答案 1 :(得分:0)

<。> .Net框架中的枚举类有许多静态成员函数可以帮助您。假设您将DB中的nvarchar值提取到名为dbCtrl Type的字符串变量中,然后

 public ControlType ControlTypeEnum
 {
     get { return (ControlType)Enum.Parse(typeof(ControlType), dbCtrlType); }
     set { dbCtrlType = dbCtrlType.ToString(); }
 }

答案 2 :(得分:0)

如果我弄错了,那么你需要一些类似的微调

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