2

我在尝试将对象添加到实体框架中的对象上下文时遇到问题。

这是代码:

//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("it.id_nivcycle=@id", new ObjectParameter("id", idnivcycle)).First();
Etablissement eta = ctest.Etablissements.Where("it.Id=@id", 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,说键 'PRIMARY' 有一个重复的条目 '0'。确实,我的“Composantes”中已经有一个 id=0 的对象。如果我删除它,我至少可以创建一个 ID=0 的对象。我不明白的是,当一个新对象被添加到上下文中时,为什么它不采用下一个可用的 ID ???? 这与我尝试在新上下文中创建此对象之前发生的错误完全相同......这可能是因为我的 model.edmx 中缺少参数?有没有办法强制将新 id 归属于新创建的对象?

我正在使用实体框架模型连接到 mysql 数据库,该模型使用 Devart dot.connector 连接到数据库。提前感谢大家对这个简单问题的回复。

皮埃尔

4

1 回答 1

6

我自己找到了解决方案。它可能对困在这个愚蠢的事情上的人有用......这只是因为在数据库本身中,ID 字段没有设置为 AUTOINCREMENT...... 改变它并更新 model.edmx 解决了这个问题。抱歉打扰你了!!!!!!

于 2009-07-28T13:15:31.823 回答