基本上我插入一行,删除该行,然后再次使用相同的键插入一个新行。它将在最后一行savechanges上抛出一个异常:“AcceptChanges无法继续,因为对象的键值与ObjectStateManager中的另一个对象冲突。在调用AcceptChanges之前,请确保键值是唯一的。”我确认deleteobject调用有效。如何让objectstatemanager知道记录已经消失并且可以重新插入?
Maps _newMaps = new Maps();
_newMaps.map_page = "BLA";
_newMaps.descr = "BLA test";
opendb.AddToMaps(_newMaps);
opendb.SaveChanges(true);
foreach (var mapsrec in opendb.Maps)
{
opendb.DeleteObject(mapsrec);
}
opendb.SaveChanges(true);
Maps _sameMaps = new Maps();
_sameMaps.map_page = "BLA";
_sameMaps.descr = "BLA test";
opendb.AddToMaps(_sameMaps);
opendb.SaveChanges(true);
答案 0 :(得分:1)
进一步的研究表明,你必须Detach()你添加到状态管理器的对象(记录),即使在执行DeleteObject()之后也要忘记它。因此,允许您添加rec,删除它,使用相同键添加记录的代码如下所示:
Maps _newMaps = new Maps();
_newMaps.map_page = "BLA";
_newMaps.descr = "BLA test";
opendb.AddToMaps(_newMaps);
opendb.SaveChanges(true);
foreach (var mapsrec in opendb.Maps)
{
opendb.DeleteObject(mapsrec);
opendb.Detach(_newMapt);
opendb.SaveChanges(true);
}
Maps _sameMaps = new Maps();
_sameMaps.map_page = "BLA";
_sameMaps.descr = "BLA test";
opendb.AddToMaps(_sameMaps);
opendb.SaveChanges(true);