2010-05-01 5 views
2

sur le blog de ScottGu est un exemple comment utiliser MVC2 Validation personnalisée avec EF4: http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspxValidation personnalisée avec MVC2 et EF4

Voici le problème:

Lorsque le Concepteur de VS2010 crée les objets pour la DB , à côté de l'exemple, vous devez ajouter [MetadataType (typeof (Person_validation)]] Annotation à cette classe. Mais quand je change quelque chose dans le concepteur, toutes ces annotations sont perdues.

Est-il possible de conserver les modifications auto apportées au fichier edmx, ou est-il une meilleure façon d'appliquer System.ComponentModel.DataAnnotations aux entités générées?

Merci.

Répondre

6

Vous le faites avec un modèle appelé vaguement "classes buddy". Fondamentalement, ce que vous faites est de créer une classe séparée avec vos métadonnées, et de créer une classe partielle qui couple les entités générées à votre classe de copain.

Pour un exemple simple, disons que vous avez une entité Person, et que vous voulez définir la propriété FirstName être nécessaire. C'est ce que vous faites en dehors de vos fichiers générés:

[MedadataType(typeof(PersonMetadata))] 
partial class Person { } // the other part is generated by EF4 

public class PersonMetadata 
{ 
    // All attributes here will be merged into the generated class, 
    // thanks to the partial class above. Just apply attributes as usual. 

    [Required] 
    public string FirstName { get; set; } 
} 

Vous pouvez trouver plus de détails sur cette approche here. Et ScottGu en parle aussi, dans l'article auquel vous êtes lié. Regardez sous le titre "Étape 5: Persistance à une base de données";)

+0

merci pour votre réponse, mais la question est plus sur la partie: [MedadataType (typeof (PersonMetadata))] Personne de classe partielle {}// l'autre partie est générée par EF4 La classe Buddy avec Annotations fonctionne correctement. Mais mon problème est: j'ai environ 100 entités. si je fais un changement mineur dans le concepteur dans le studio visuel le code est régénéré. donc toutes les annotations [MedadataType (typeof (....))] se référant à la classe buddy ont disparu. Donc, si je viens d'ajouter un attribut, je peux aller ajouter 100 classes à l'annotation. pas tout à fait l'idée d'une génération avec EF. – csharpnoob

+0

@csharpnoob - Il semble que vous ajoutez le 'MetadataTypeAttribute' aux mauvaises parties des classes partielles. L'idée est que puisque EF génère des classes partielles, vous pouvez écrire * vos propres * parties dans * différents fichiers * qui ne sont * pas * régénérés, où vous appliquez le 'MetaDataAttribute'. Je place habituellement la classe partielle en appliquant l'attribut dans le même fichier que la classe buddy, donc je peux voir instantanément quelle (s) classe (s) sera (seront) affectée (s) par les changements. –

+0

bon sang. C'est ma faute! annotation sur partielle, j'ai raté ce petit détail. celui-ci existe quand même pour définir les valeurs par défaut. Merci encore. – csharpnoob

Questions connexes