L'ajout de la propriété des attributs dans l'Entity Framework code
Est-il possible d'ajouter des attributs personnalisés pour propriétés en EF code généré? La seule chose que je peux voir comme une solution plausible serait de venir avec un modèle T4. Toutefois, en raison de la nature de l'attribut qu'il serait impossible de déterminer le paramètre d'attribut par EF de la propriété.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire en spécifiant un type de métadonnées qui reflète les propriétés et est utilisé simplement pour l'attribution.
Steve Smith blogs à ce sujet ici.
Malheureusement, l'approche ci-dessus est fragile pour le refactoring. Une autre option est d'utiliser les nouvelles entités POCO. Ces éviter au moment de la compilation génération de code tout à fait comme ce que j'en dis. Je n'ai pas utilisé encore ne peut donc pas commenter sur tout les pièges ou les compromis.
assembly.GetType(typeof(Dinner).ToString().GetProperties()
,property.Attributes
est nulle etproperty.GetCustomAttributes(typeof(RequiredAttribute))
renvoie une longueur nulle de la matrice doit-on réfléchir Dinner_Validation ou c'est autre chose de travers?Vous pouvez ajouter ce fichier EDMX, avec le Designer aussi:
Et remplacer T4:
Avec:
public string Property(EdmProperty edmProperty)
etpublic string NavigationProperty(NavigationProperty navProp)
. Le if de la réponse est la même.Vous pouvez créer de l'interface et de déclarer l'attribut sur l'interface.
Vous pouvez ajouter ce fichier EDMX, avec le Designer aussi:
Et remplacer T4:
Avec:
Et pour Entity Framework 6, remplacer
avec
Avertissements:
exemple de sortie:
En Plus de BurnsBA de répondre, pour l'appliquer À la Navigation propriétés, mise à jour
NavigationProperty()
ainsi:Je l'utilise pour ajouter
[Newtonsoft.Json.JsonIgnore]
de mes propriétés.Remarque: Vous devez ajouter ces
<...>Model.tt
et pas<...>Model.Context.tt
Je ne crois pas que vous le pouvez. Le générateur déclare toutes les classes de manière partielle, vous permettant de l'étendre, mais il ne vous permettra pas de marquer les propriétés avec des attributs personnalisés comme il sera tout simplement de générer sur eux. La seule chose que vous pouvez faire est d'écrire votre propre entités.