2013-05-07 62 views
-1

我有一张名为DynamicControl的表格。它有一个名为ControlType的属性,它在SQL Server 2008数据库中为nvarchar(255)如何在不使用POCO但EF生成模型类的情况下创建枚举类型的属性?

在代码中,我要的属性值是一个字符串,但它的字符串值必须来自一个枚举的字符串表示,像这样:

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

我该怎么办呢?

更新 我忘了补充信息的重要位,但不提供这,这听起来像一个愚蠢的问题。这个位是:我没有使用POCO的。我被传统限制为使用实体框架生成的模型类。如果我正在写POCO的,我只是简单地将数据类型改为枚举。但是,由于我使用生成的模型,这样做会导致EDMX标记和模型类之间的差异。

更新我的问题是,我怎么告诉实体框架生成的EDMX右标记,向上,以便在该属性的类型ControlType枚举,而不是字符串或为Int32?

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

+0

你做u​​nerstand,任何类似的东西这个枚举类型的属性将是一个整数不是一个字符串的权利? – 2013-05-07 13:13:25

+0

是的,我喜欢。如果我正在写POCO的,我会写一个财产二传手来做翻译。不过,我正在使用实体框架生成的类。 – 2013-05-07 13:14:26

+0

它仍然不清楚查尔斯的建议不起作用的原因,这基本上是巴尔德德的建议,只有更多的细节。用你刚刚分享的相关信息更新你的问题。 – 2013-05-07 13:17:43

回答

0

简单地定义你的财产是你的类型的枚举(即:ControlType).NET Framework中

+0

对不起,我忘记补充说,对于这个小项目,我没有使用POCO,而是实体框架生成的生成类。 – 2013-05-07 13:13:36

0

Enum类有许多静态成员函数,以帮助YPU。 假设你从数据库获取nvarchar的值到一个名为dbCtrlType一个字符串变量,然后

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

我的歉意。我刚刚澄清了我的问题。 – 2013-05-07 13:16:51

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

谢谢,但那不是我想要的。我知道如何获得一个枚举的字符串表示,反之亦然。我的问题是“我如何告诉实体框架我希望它通过创建类型为枚举的属性而不是基元的方式来生成模型。” – 2013-05-07 13:21:44

相关问题