2009-07-28 44 views
2

我在嘗試將對象添加到實體框架中的對象上下文時遇到問題。c#向對象上下文添加一個新對象會返回「更新條目時發生錯誤」,重複主鍵的條目

下面是代碼:

//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(); 

在調用SaveChanges(),我收到一個UpdateException,說是有一個重複的條目 '0' 鍵 'PRIMARY'。 確實,我已經在id = 0的「Composantes」中有一個對象。如果我刪除它,我至少可以創建一個ID = 0的對象。我不明白的是,當一個新的對象被添加到上下文中時,爲什麼不需要下一個可用的ID?這與我在嘗試在新的上下文中創建此對象之前發生的錯誤完全相同......這可能是因爲我的model.edmx中缺少參數?有沒有辦法強制新標識符歸屬於新創建的對象?

我連接到mysql數據庫使用實體框架模型使用Devart dot.connector連接到數據庫。 感謝你們所有人提前回答這個簡單的問題。

皮埃爾

回答

6

我找到了自己的解決方案。這可能是有用的卡在這個愚蠢的事情... 這只是因爲在數據庫iteself ID字段未設置爲AUTOINCREMENT ... 更改此並更新model.edmx解決了這個問題。 不好意思打擾你這個!!!!!