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 :

Les insertions ne sont pas validées dans la BD


Sujet :

Entity Framework

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Full-stack
    Inscrit en
    Novembre 2010
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Full-stack

    Informations forums :
    Inscription : Novembre 2010
    Messages : 372
    Points : 489
    Points
    489
    Par défaut Les insertions ne sont pas validées dans la BD
    Bonsoir à tous,

    J'ai utilisé 2 procédures dans l'ordre, une pour la suppression et une pour l'insertion. La suppression dont voici le code marche sans problème.
    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
     
     public static void SupprimerPax(Passager oPax)
            {
                var req = (from Pax in ContexteDAO.ContexteDonnees.Passagers
                           where Pax.CodePax == oPax.CodePax
                           orderby Pax.IdentifiantVol
                           select Pax).ToList();
     
                foreach (var MyPax in req)
                {
                    if ((MyPax.CodePax == oPax.CodePax) == true)
                    {
                        if ((MyPax.EntityState == EntityState.Detached) == true)
                        {
                            ContexteDAO.ContexteDonnees.ObjectStateManager.GetObjectStateEntry(MyPax);
                            ContexteDAO.ContexteDonnees.ObjectStateManager.ChangeObjectState("Passager", EntityState.Added);
                            ContexteDAO.ContexteDonnees.Passagers.DeleteObject(oPax);
     
                            ContexteDAO.Enregistrer();
     
                        }
                        else
                        {
                            ContexteDAO.ContexteDonnees.Passagers.Attach(MyPax);
                            ContexteDAO.ContexteDonnees.Passagers.DeleteObject(MyPax);
     
                            ContexteDAO.Enregistrer();
                        }
                    }
                }
            }
    Quant à l'insertion dont le code est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public static void AjouterPax(Passager oPax)
            {
                ContexteDAO.ContexteDonnees.Passagers.AddObject(oPax);
                ContexteDAO.Enregistrer();
     
            }
    Elle fonctionne apparemment jusqu'à la sauvegarde dans la BD. A chaque fois une première insertion est validée, mais lorsque je vérifie du côté de la BD SQL, l'enregistrement ne s'y trouve pas. Et lors d'une 2nde tentative, j'ai ce message d'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Les modifications apportées à la base de données ont été validées, mais une erreur s'est produite lors de la mise à jour du contexte de l'objet. ObjectContext est peut-être dans un état incohérent. Message d'exception interne : AcceptChanges ne peut pas continuer, car les valeurs de clés de l'objet sont en conflit avec un autre objet dans ObjectStateManager. Assurez-vous que les valeurs de clés sont uniques avant d'appeler AcceptChanges.
    J'ai même supprimé la méthode AcceptChanges(), mais ne marche encore.
    Qui aurait une solution?

    Cordialement.
    La recherche de la connaissance est une Lumière qui apaise le Cœur.
    Si une réponse vous a été utile , n'oubliez pas de voter en cliquant sur:.

  2. #2
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Quel est le code de ta méthode Enregistrer?
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Full-stack
    Inscrit en
    Novembre 2010
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Full-stack

    Informations forums :
    Inscription : Novembre 2010
    Messages : 372
    Points : 489
    Points
    489
    Par défaut
    Bonjour,
    Voici le code de la methode Enregistrer():

    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
     
     
     public static void Enregistrer()
            {
                try
                {
                    ContexteDAO.ContexteDonnees.SaveChanges();
     
                    //ContexteDAO.ContexteDonnees.AcceptAllChanges();
     
                }
                catch (OptimisticConcurrencyException ocex )
                {
     
                    ContexteDAO.ContexteDonnees.Refresh(System.Data.Objects.RefreshMode.StoreWins, ocex.StateEntries[0].Entity);
     
                    ContexteDAO.ContexteDonnees.SaveChanges();
                    ContexteDAO.ContexteDonnees.AcceptAllChanges();
                    throw ocex;
                }
     
     
     
     
            }
    Merci.
    La recherche de la connaissance est une Lumière qui apaise le Cœur.
    Si une réponse vous a été utile , n'oubliez pas de voter en cliquant sur:.

  4. #4
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Je ne suis pas un pro EF (je suis plutôt orienté client que serveur) mais en règle générale, j'essaye de ne garder le contexte que le temps de l'opération.

    Essaye avec un truc genre :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    using (var mycontext = new MyContext())
    {
      ....
    }
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 89
    Points : 71
    Points
    71
    Par défaut
    PK voulez-vous utiliser une méthode enregisrtrer(), et l'entity FrameW vous offre la possibilité de sauvegarder les modification par SaveChanges()?
    je pense qu'un truc comme ça doit marcher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public static void AjouterPax(Passager oPax)
    {
     using (ctxEntities bd = new ctxEntities())
                {
                     ContexteDAO.ContexteDonnees.Passagers.Add(oPax);
                     ContexteDAO.ContexteDonnees.SaveChanges();
                 }
    }

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Full-stack
    Inscrit en
    Novembre 2010
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Full-stack

    Informations forums :
    Inscription : Novembre 2010
    Messages : 372
    Points : 489
    Points
    489
    Par défaut
    Bonjour,

    Citation Envoyé par karamovic Voir le message
    PK voulez-vous utiliser une méthode enregisrtrer(), et l'entity FrameW vous offre la possibilité de sauvegarder les modification par SaveChanges()?
    je pense qu'un truc comme ça doit marcher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public static void AjouterPax(Passager oPax)
    {
     using (ctxEntities bd = new ctxEntities())
                {
                     ContexteDAO.ContexteDonnees.Passagers.Add(oPax);
                     ContexteDAO.ContexteDonnees.SaveChanges();
                 }
    }
    Tout est une question de portée et de soft, voici ce que contient ma méthode enregistrer:
    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
    public static void Enregistrer()
            {
                try
                {
                    ContexteDAO.ContexteDonnees.SaveChanges();
                    
                    //ContexteDAO.ContexteDonnees.AcceptAllChanges();
                    
                }
                catch (OptimisticConcurrencyException ocex )
                {
                   
                    ContexteDAO.ContexteDonnees.Refresh(System.Data.Objects.RefreshMode.ClientWins, ocex.StateEntries[0].Entity);
                    
                    ContexteDAO.ContexteDonnees.SaveChanges();
                    ContexteDAO.ContexteDonnees.AcceptAllChanges();
                    throw ocex;
                }
                
                    
                
                
            }
    C'est la même, que vous venez d'écrire. Comme le projet est vaste, je suis allé à autre chose et vous ferez le compte rendu lorsque je l'aurai résolu.

    Cordialement.
    La recherche de la connaissance est une Lumière qui apaise le Cœur.
    Si une réponse vous a été utile , n'oubliez pas de voter en cliquant sur:.

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/03/2009, 15h11
  2. Réponses: 6
    Dernier message: 09/02/2008, 17h49
  3. FCKeditor : les accents ne sont pas insérés dans la bdd
    Par Nasky dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 13/07/2007, 14h51
  4. Réponses: 1
    Dernier message: 16/05/2007, 15h52
  5. Réponses: 4
    Dernier message: 11/07/2006, 21h43

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