2013-05-07 69 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

相關問題