Utilisation de DataAnnotations avec Entity Framework

asp.net-mvc-2 c# entity-framework validation

Question

J'ai utilisé Entity Framework avec VS2010 pour créer une classe de personnes simple avec propriétés, prénom, nom, et email. Si je veux attacher des DataAnnotations comme cela est fait dans cet article de blog, j'ai un petit problème car ma classe de personne est générée dynamiquement. Je pouvais éditer directement le code généré dynamiquement, mais chaque fois que je devrais mettre à jour mon modèle, tout mon code de validation serait effacé.

Le premier instinct était de créer une classe partielle et d'essayer d'attacher des annotations, mais il se plaint que j'essaye de redéfinir la propriété. Je ne sais pas si vous pouvez faire des déclarations de propriétés en C # comme des déclarations de fonctions en C ++. Si vous pouviez, cela pourrait être la réponse. Voici un extrait de ce que j'ai essayé:

namespace PersonWeb.Models
{
  public partial class Person
  {
    [RegularExpression(@"(\w|\.)+@(\w|\.)+", ErrorMessage = "Email is invalid")]
    public string Email { get; set; } 
    /* ERROR: The type 'Person' already contains a definition for 'Email' */
  }
}

Réponse acceptée

Une classe de copains correspond plus ou moins à la direction empruntée par votre extrait de code, sauf que votre classe Person partielle, codée manuellement, aurait une classe interne, telle que:

[MetadataType(typeof(Person.Metadata))]
public partial class Person {
    private sealed class MetaData {
        [RegularExpression(...)]
        public string Email { get; set; }
    }
}

Ou vous pourriez avoir votre classe Person partielle manuellement et une classe Meta séparée comme:

[MetadataType(typeof(PersonMetaData))]
public partial class Person { }

public class PersonMetaData {
[RegularExpression(...)]
public string Email;
}

Ce sont des solutions de contournement et il peut être plus approprié d’avoir une classe de présentation mappée.


Réponse populaire

Vous devez utiliser une classe de métadonnées "ami" ou (à mon goût) un projet sur un modèle de présentation au lieu de lier directement les vues aux entités .



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow