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 :

[SaveChanges] UpdateException occured


Sujet :

Entity Framework

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2004
    Messages : 157
    Points : 123
    Points
    123
    Par défaut [SaveChanges] UpdateException occured
    Bonjour,

    Je me fais un petit logiciel de compta perso.

    J'ai fait un modèle assez simple Invoice, Account, AccountDistribution.

    Je crée une "Invoice" contenant 1 Account et N AccountDistribution.

    Niveau modèle on a donc :
    Invoice 1 - * AccountDistribution.
    Account 1 - * Invoice
    Account 1 - * AccountDistribution.

    1 Invoice est une facture qui détaille la dépense et la date, le montant...
    Elle contient un compte de départ. ex : 5 Edf, 6 compte courant, (compte virtuel.)

    2 Account contient mes comptes a débiter ou créditer. Ils peuvent être fournisseur ou physique ou virtuel.

    3 Account distribution sont les mouvements entre les comptes.
    exemple :

    Invoice : Facture Edf 500 € (account : 5 Edf)
    AccountDistribution :
    1. (Account : 5 Edf) 500€ Debit
    2. (account : 6 Compte courrant) 500 Crédit.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    this.CurrentInvoice = new ComptaPerso_Models.Invoice();
    this.CurrentInvoice.AccountDistribution.Add(new ComptaPerso_Models.AccountDistribution);
     
    Bdd.AddToInvoice(CurrentInvoice);
    Bdd.SaveChanges();
    Et la c'est le drame.

    Les entités dans « Entities.AccountDistribution » participent à la relation « FK_AccountDistribution_Invoice ». 0 « Invoice » connexes ont été trouvés. 1 « Invoice » est attendu.
    L'ajout d'un invoice avec un account ne pause pas de problème.
    Les account existe déjà alors que les AccountDistribution sont créé en même temps que l'invoice.

    Si vous avez la moindre information sur ce genre de bug je vous en serais reconnaissant.

    Merci d'avance

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Points : 2 331
    Points
    2 331
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    this.CurrentInvoice = new ComptaPerso_Models.Invoice();
    ComptaPerso_Models.AccountDistribution accountDist = new ComptaPerso_Models.AccountDistribution();
    this.CurrentInvoice.AccountDistribution.Add(accountDist);
     
    Bdd.AddToAccountDistribution(accountDist);
    Bdd.AddToInvoice(CurrentInvoice);
    Bdd.SaveChanges();
    En ajoutant manuellement dans le context, ça doit le faire !

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2004
    Messages : 157
    Points : 123
    Points
    123
    Par défaut
    Arf le problème semble être ailleurs.

    J'ai fait une form de test qui ajoute automatiquement les données sans passer par une interface et tout semble fonctionner correctement.

    Par contre Dans mon formulaire, je crée un nouvel Invoice a l'ouverture.

    je le bind a l'écran (textbox, combo,...)

    Je fait un ajout d'un AccountDistribution qui est binde sur une datagridview sur un bouton add.

    a la validation du formulaire, j'ai toujours la même erreur.

    Constructor :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    this.CurrentInvoice = new ComptaPerso_Models.Invoice();
     
                this.CurrentInvoice.Date = DateTime.Now;
     
                //Objet de références seul leur identifiant est stoqué en base
                PeriodicityList = PeriodicityList.Load("Periodicity.xml", Session.LangCode);
                MoveTypeList = MoveTypeList.Load("MoveType.xml", Session.LangCode);
     
                InitializeBinding();// crée les databindings.Add
    Code du bouton Add :

    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
     
    private void btnAdd_Click(object sender, EventArgs e)
            {
                ComptaPerso_Models.AccountDistribution value = null;
                try
                {
                    value = new ComptaPerso_Models.AccountDistribution();
     
                    value.Account = this.CurrentAccount;
     
                    if (((int)cmbDebitCredit.SelectedValue) == (int)DebitCredit.DEBIT)
                        value.Debit = decimal.Parse(txtAmountRepart.Text);
                    else
                        value.Credit = decimal.Parse(txtAmountRepart.Text);
     
     
                    this.CurrentInvoice.AccountDistribution.Add(value);
     
     
                }
                catch (Exception)
                {
     
                    throw;
                }
            }
    Code du bouton ok :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    foreach (ComptaPerso_Models.AccountDistribution value in CurrentInvoice.AccountDistribution)
                {
                    Session.Bdd.AddToAccountDistribution(value);
                }
     
                Session.Bdd.AddToInvoice(CurrentInvoice);
                Session.Bdd.SaveChanges();
     
                this.CurrentInvoice = null;
                this.DialogResult = DialogResult.OK;
                this.Close();
    C'est vraiment pas un code compliqué, je comprends pas trop.

Discussions similaires

  1. Réponses: 1
    Dernier message: 31/10/2011, 09h19
  2. update - modification d'une occurance
    Par starius dans le forum Langage SQL
    Réponses: 5
    Dernier message: 22/04/2004, 12h12
  3. recherche du nombre d'occurences dans une table
    Par berry dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/01/2004, 20h03
  4. Première occurence d'une donnée
    Par bob33 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 10/06/2003, 13h50

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