【问题标题】:How to make a property of an enum type when I am not using POCO's but EF generated model classes?当我不使用 POCO 而是使用 EF 生成的模型类时,如何创建枚举类型的属性?
【发布时间】:2013-05-07 13:08:48
【问题描述】:

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

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

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

我该怎么做?

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

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

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

【问题讨论】:

  • 你不明白这种枚举类型的任何属性都是整数而不是字符串吗?
  • 是的,我愿意。如果我正在编写 POCO,我会编写一个属性设置器来进行翻译。不过,我正在使用实体框架生成的类。
  • 尚不清楚查尔斯的建议不起作用的原因,这基本上是巴特杜德的建议,只是提供了更多细节。使用您刚刚分享的相关信息更新您的问题。
  • 这些建议可行。但是每次我更新我的模型时,手写的属性都会被模型生成的类覆盖。我需要一种方法来告诉 EDMX 生成器我希望某个属性为枚举类型,以便它在 EDMX 中吐出正确的标记。
  • 这只是告诉我不应该使用手写的peropety。如果枚举属性实际上被称为ControlType,那么使用它似乎很奇怪。

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


【解决方案1】:

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

【讨论】:

  • 对不起,我忘了为这个小项目添加,我不是使用 POCO,而是使用实体框架生成的生成类。
【解决方案2】:

.Net 框架中的枚举类有很多静态成员函数来帮助 ypu。 假设您从 DB 中获取 nvarchar 值到一个名为 dbCtrlType 的字符串变量中,那么

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

【讨论】:

  • 我很抱歉。我刚刚澄清了我的问题。
【解决方案3】:

如果我猜对了,那么你需要一些类似的东西,只需要一点微调

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

【讨论】:

  • 谢谢,但这不是我想要的。我知道如何获取枚举的字符串表示形式,反之亦然。我的问题是“我如何告诉 Entity Framework 我希望它以创建枚举类型而不是原始类型的属性的方式生成模型。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-11
  • 1970-01-01
  • 2018-03-26
  • 2015-02-10
  • 1970-01-01
相关资源
最近更新 更多