IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entity Framework Discussion :

Erreurs de validation [Débutant]


Sujet :

Entity Framework

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 265
    Points
    265
    Par défaut Erreurs de validation
    Bonjour,
    lors d'un context.SaveChanges(); une exception DbValidationEntityException est levée:
    Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.
    Quand je regarde la propriété EntityValidationErrors, il est juste indiqué: {System.Data.Entity.Validation.DbEntityValidationResult}.
    Comment savoir précisément quelles sont les Entités/propriétés qui sont à l'origine de cette exception ?

  2. #2
    Membre éprouvé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Points : 1 056
    Points
    1 056
    Par défaut
    Salut,

    Alors voici un exemple en mode console :

    Tu va pouvoir voir deux facon de récupérer les erreurs :
    - Soit en appelant la méthode "GetValidationErrors()" de ton "context".
    - Soit sur un catch de type "DbEntityValidationException" lors de l'appel de "SaveChanges()"

    Classe Client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        public class Client
        {
            public int PersonneID { get; set; }
            [MaxLength(50)]
            [Required]
            public string Nom { get; set; }
        }
    Main et code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
            static void Main(string[] args)
            {
                using (var context = new TestEfFirstContext())
                {
                           PersonneValidation(context);
                }
                Console.ReadLine();
            }
            private static void PersonneValidation(TestEfFirstContext context)
            {
                var client = new Client() { Nom = string.Empty };
                context.Personnes.Add(client);
                //ClientValidation1(context);
                ClientValidation2(context);
            }
            private static void ClientValidation1(TestEfFirstContext context)
            {
                var errors = context.GetValidationErrors();
                ErrorPrinter(errors);
            }
     
            private static void ClientValidation2(TestEfFirstContext context)
            {
                try
                {
                    context.SaveChanges();
                }
                catch (DbEntityValidationException ex)
                {
                    ErrorPrinter(ex.EntityValidationErrors);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Exception non géré :");
                    Console.WriteLine(ex.Message);
                }
            }
     
            private static void ErrorPrinter(IEnumerable<DbEntityValidationResult> errors)
            {
                foreach (var error in errors)
                {
                    foreach (var item in error.ValidationErrors)
                    {
                        Console.WriteLine("{0} : {1}", item.PropertyName, item.ErrorMessage);
                    }
                }
            }
    En espérant t'avoir éclairé !

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 265
    Points
    265
    Par défaut
    Ça marche très bien ton code. Merci.
    Cependant voici par exemple l'information que je récupère:
    Text : Le champ Text est requis.

    Mais j'aimerais connaître l'Entité dont il s'agit...

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 265
    Points
    265
    Par défaut
    Bon, heureusement que dans mon modèle je n'ai qu'une seule Entité qui a une propriété Text. Problème résolu.
    Par contre, si tu as quand-même la solution pour afficher l'Entité à laquelle appartient la propriété, pour une prochaine fois...

  5. #5
    Membre éprouvé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Points : 1 056
    Points
    1 056
    Par défaut
    Juste la méthode "ErrorPrinter" qui change :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            private static void ErrorPrinter(IEnumerable<DbEntityValidationResult> errors)
            {
                foreach (var error in errors)
                {
                    //Le changement c'est maintenant :
                    Console.WriteLine("Entité : {0}", error.Entry.Entity.GetType().Name);
                    foreach (var item in error.ValidationErrors)
                    {
                        Console.WriteLine("{0} : {1}", item.PropertyName, item.ErrorMessage);
                    }
                }
            }
    Content de t'avoir aidé

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 265
    Points
    265
    Par défaut
    Super ! Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [W3C] Erreurs de validation incompréhensibles
    Par brotelle dans le forum Balisage (X)HTML et validation W3C
    Réponses: 21
    Dernier message: 12/05/2006, 12h03
  2. [W3C] erreur de validation W3C HTML 4.01 Transitional
    Par durand2504 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 14/03/2006, 10h47
  3. [debutant] erreur de validation DTD/schema
    Par loic_86 dans le forum Valider
    Réponses: 1
    Dernier message: 13/01/2006, 22h04
  4. [DOM] Erreur pour valider une DTD
    Par lenghh dans le forum Format d'échange (XML, JSON...)
    Réponses: 13
    Dernier message: 19/05/2004, 18h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo