簡體   English   中英

實體框架枚舉和字符串關聯

[英]Entity Framework Enum and string association

我想使用本文中的方法為我的枚舉類型實現更友好的ToString()輸出。 我想知道在Entity Framework的自動生成的Enum代碼中如何做到這一點? 我是否必須修改代碼生成模板(如果是這樣,有人可以給我一些指導,因為模板相當復雜),或者有人可以提出替代方法嗎?

謝謝!

您可以在EF模型中使用自己的枚舉類型,而不是在模型設計器中創建新的枚舉。 這是如何做:

在模型設計師中,點擊表面並選擇:

添加新 - >枚舉類型...

在對話框中,只需設置復選框:

參考外部類型

並輸入您的類型: namespace.MyEnum

然后在表中創建列以使用此類型。

由於您可能要修改現有模型,因此請確保模型中的枚舉類型與代碼中的(外部)枚舉類型之間沒有混淆。 最好的方法是刪除先前在模型中創建的枚舉類型,並調整列以使用代碼中的關聯枚舉類型。

現在,您可以按計划聲明具有描述屬性的枚舉類型。

您無需為枚舉制作變通方法。 它們在最新的實體框架中得到支持。

為了使您的網站對您的網站友好,您可以使用屬性。 這是示例屬性:

public class EnumDescription : Attribute
{
    public string Text { get; private set; }

    public EnumDescription(string text)
    {
        this.Text = text;
    }
}

使用屬性標記您的枚舉:

public enum DaylightSavingTime
{
    [EnumDescription("Detect automatically")]
    Auto = 0,
    [EnumDescription("DST always on")]
    AlwaysOn = 1,
    [EnumDescription("DST always off")]
    AlwaysOff = 2
}

添加擴展以啟用ToDescription()方法:

public static class EnumExtensions
{
    public static string ToDescription(this Enum enumeration)
    {
        Type type = enumeration.GetType();
        MemberInfo[] memInfo = type.GetMember(enumeration.ToString());

        if (null != memInfo && memInfo.Length > 0)
        {
            object[] attrs = memInfo[0].GetCustomAttributes(typeof(EnumDescription), false);
            if (null != attrs && attrs.Length > 0)
                return ((EnumDescription)attrs[0]).Text;
        }

        return enumeration.ToString();
    }
}

用法:

var blabla = DaylightSavingTime.Auto;
Console.WriteLine(blabla.ToDescription());

輸出:

自動檢測

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM