Voglio usare il metodo in questo articolo per implementare uscite ToString () più amichevoli per i miei tipi di enum. Mi piacerebbe sapere in che modo ciò può essere fatto nei codici Enum generati automaticamente di Entity Framework? Dovrei modificare il modello di generazione del codice (se sì, qualcuno può gentilmente darmi una guida poiché il modello è piuttosto complicato) o qualcuno può suggerire un metodo alternativo?
Grazie!
È possibile utilizzare il proprio tipo di enum nel modello EF, invece di creare un nuovo enum nel designer del modello. Ecco come:
Nel modellista, rght clicca sulla superficie e seleziona:
Aggiungi nuovo -> Tipo enum ...
Nella finestra di dialogo, basta impostare la casella di controllo:
Tipo di riferimento esterno
e inserisci il tuo tipo: namespace.MyEnum
Quindi crea colonne nelle tue tabelle per utilizzare questo tipo.
Dato che probabilmente modificherete il modello esistente, assicuratevi che non vi sia confusione tra il tipo di enum dal modello e il tipo di enum (esterno) dal vostro codice. L'approccio migliore sarebbe rimuovere il tipo di enum precedentemente creato nel modello e regolare le colonne per utilizzare il tipo di enum associato dal codice.
Ora puoi dichiarare il tuo tipo enum con gli attributi di descrizione come pianificato.
Non è necessario creare soluzioni alternative per l'enumerazione. Sono supportati nell'ultimo Entity Framework.
Per rendere le tue enumerazioni amichevoli al tuo sito web puoi usare gli attributi. Ecco un attributo di esempio:
public class EnumDescription : Attribute
{
public string Text { get; private set; }
public EnumDescription(string text)
{
this.Text = text;
}
}
Segna le tue enumerazioni con l'attributo:
public enum DaylightSavingTime
{
[EnumDescription("Detect automatically")]
Auto = 0,
[EnumDescription("DST always on")]
AlwaysOn = 1,
[EnumDescription("DST always off")]
AlwaysOff = 2
}
Aggiungi estensioni per abilitare il metodo 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();
}
}
Uso:
var blabla = DaylightSavingTime.Auto;
Console.WriteLine(blabla.ToDescription());
Produzione:
Rileva automaticamente