2009-07-28 5 views
2

Je n'arrive pas à ajouter un objet à un contexte d'objet dans Entity Framework.C# Ajouter un nouvel objet à un contexte d'objet renvoie "erreur survenue lors de la mise à jour des entrées", entrée dupliquée pour clé primaire

Voici le code:

//related object ids are retrieved from another context. 
//since I thought the problem could be linked to object loaded in this context, I tried to 
//close it and start on a fresh object context... 
int idetab = currentEtab.Id; 
long idnivcycle = selectedNivcycle.id_nivcycle; 
long idanscol = AnneeScolaireEnCours.id_annee_scolaire; 
//and this context is closed 
context.Dispose(); 


//This is the new object context 
objectcontextEntities ctest = new objectcontextEntities(); 
//from where I retrieve all the objects I want to link to the object I want to create :    
Nivcycle niv = ctest.Nivcycles.Where("[email protected]", new ObjectParameter("id", idnivcycle)).First(); 
Etablissement eta = ctest.Etablissements.Where("[email protected]", new ObjectParameter("id", Convert.ToInt32(idetab))).First(); 
annee_scolaire an = ctest.annee_scolaire.Where("it.en_cours = @id", new ObjectParameter("id", Convert.ToSByte(true))).First(); 
// Now I try to create my new object   
Composante co = new Composante(); 
co.Nom = "test"; 
co.Nivcycle = niv; 
co.Etablissement = eta; 
co.AnneeScolDeb = an; 
ctest.AddToComposantes(co); 
ctest.SaveChanges(); 
ctest.Dispose(); 

Sur SaveChanges(), je reçois un UpdateException, en disant qu'il ya une entrée en double '0' pour Key 'PRIMAIRE. Il est vrai que j'ai déjà un objet dans mes "Composantes" avec id = 0. Et si je le supprime, je peux au moins créer un objet avec ID = 0. Ce que je ne comprends pas, c'est que quand un nouvel objet est ajouté au contexte, pourquoi ne prend-il pas le prochain ID disponible ???? C'est exactement la même erreur qui se produisait avant que j'essaie de créer cet objet dans un nouveau contexte .... C'est peut-être à cause d'un paramètre manquant dans mon model.edmx? Existe-t-il un moyen de forcer l'attribution d'un nouvel identifiant à l'objet nouvellement créé?

Je me connecte à la base de données mysql à l'aide d'un modèle de structure d'entité à l'aide de Devart dot.connector pour me connecter à la base de données. En vous remerciant d'avance pour votre réponse à cette question simple.

Pierre

Répondre

6

J'ai trouvé la solution moi-même. Il peut être utile pour quelqu'un coincé sur cette chose stupide ... C'est juste parce que dans la base de données lui-même le champ ID n'a pas été défini à AUTOINCREMENT ... Changer cela et mettre à jour le model.edmx a résolu le problème. Désolé de vous déranger avec cela !!!!!