[英]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.