Quelle est la meilleure façon de travailler avec les Énumérations dans le Cadre de l'Entité?
Remarques: je suis en utilisant EF 3 et Firebird.
Quelle est la meilleure façon de travailler avec les Énumérations dans le Cadre de l'Entité?
Remarques: je suis en utilisant EF 3 et Firebird.
Il est un peu meilleur moyen de le faire en EF 4. Malheureusement, il ne fonctionne pas en EF 1.
Voici une autre approche.
Mise à jour: Véritable prise en charge des énumérations a été ajouté dans le juin 2011 EF CTP.
Mise à jour:
Entity Framework prend désormais en charge les Énumérations de la nativité.
Origine:
C'est l'un de ces irritants choses sur EF. Ne sera pas soutenir encore!
Ou vous pouvez faire quelque chose comme:
public MyEnum MyEnumProperty
{
get { return (MyEnum) InnerEnumProperty; }
set { InnerEnumProperty = (int) value; }
}
Mais il me fait me sentir sale.
Cette question est un peu vieux, mais permettez-moi de vous diriger à un plus récent, car aujourd'hui, nous avons une version plus récente de l'Entity Framework:
Vidéo: Entity Framework 5 Enums et le Déplacement de la Solution de EF 4.3 par Julie Lerman
J'ai utilisé cette vidéo aujourd'hui pour rattraper enums
dans l'Entity Framework. C'est une grande étape par étape de démonstration. Espérons qu'il vous aide aussi.
Il y a aussi ce post d'introduction à Entity Framework de Conception de blog:
Je fais un usage intensif de tables (avec les valeurs par défaut) en DB de la forme
CREATE TABLE [dbo].[CommunicationPreferences]
(
[ID] smallint NOT NULL,
[SystemName] nvarchar(50) NOT NULL,
[Description] nvarchar(200) NOT NULL,
)
Et je conduis ma EF4 entités à partir de la DB.
N. B. je n'utilise pas de points de vue, SPROCS ou des fonctions SQL, pas de complexes EF types, il suffit de les diriger table de l'entité de cartographie. Puis l'étendre mon entité classes partielles pour ajouter des fonctionnalités supplémentaires pour garder les choses SÈCHES.
Pour les Énumérations, j'ai un simple modèle T4, j'ai la main une liste de tables (de la forme ci-dessus), l' .tt fichier est tiré à chaque fois que je mettre à jour le modèle EF de la DB (ou si j'en ai besoin à la demande), il saisit les données, et construit les Énumérations, par exemple
/// <summary>
/// Enums For The dbo Schema
/// </summary>
public enum CommunicationPreferencesList : short
{
/// <summary>
/// HTML Emails
/// </summary>
[EnumTextValue(@"HTML Emails")]
HTMLEmail = 1,
/// <summary>
/// Plain Text Emails
/// </summary>
[EnumTextValue(@"Plain Text Emails")]
PlainEmail = 2,
/// <summary>
/// Mobile Telephone
/// </summary>
[EnumTextValue(@"Mobile Telephone")]
Mobile = 3,
/// <summary>
/// Landline Telephone
/// </summary>
[EnumTextValue(@"Landline Telephone")]
Landline = 4,
/// <summary>
/// SMS
/// </summary>
[EnumTextValue(@"SMS")]
SMS = 5,
}
Puis, quand j'ai affaire à un FK ID de la colonne et de la Propriété à une entité par exemple
Users.CommunicationPreferenceID
J'ai tout simplement jeté l'ID ou la enum pour la comparaison. par exemple
CommunicationPreferencesList usersPreference = (CommunicationPreferencesList)currentUser.CommunicationPreferenceID;
if(usersPreference == CommunicationPreferencesList.SMS)
{
//send SMS
}
else if(usersPreference == CommunicationPreferencesList.Mobile)
{
//ring the phone
}
J'ai ensuite quelques simples aides pour donner par exemple la EnumTextValue à partir d'un enum exemple par exemple
string chosenMethod = EntityHelper.GetEnumTextValue(CommunicationPreferencesList.Mobile);
=> "Mobile Telephone"
Je trouve cela simple, sans tracas, transparent, facile à utiliser, et pour ma part il fonctionne un régal et je suis heureux. Je ne vois pas la nécessité de masque totalement la valeur numérique dans la base de données / de l'entité à partir de la consommation de code, je suis très heureux de voter une ou l'autre des valeurs, et se retrouvent avec assez propre code lisible, plus le gentil petit plus de la EnumTextValue qui est généré à partir de l' [Description] champ dans la base de données.
J'ai eu un problème similaire et résolu que par l'écriture d'une extension sur l'entité par l'intermédiaire de la classe partielle mécanisme. J'ai juste ajouté une propriété qui ne le casting de champ DB déjà dans l'entité, dans notre cas, seulement un nombre entier.
Seul écueil est d'ajouter une option ignorer la sérialisation d'attribut, par exemple lors de l'utilisation en combinaison avec WCF.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.