2011-01-24 32 views
0

基本上我插入一行,删除该行,然后再次用相同的键插入一个新行。它会在最后一行savechanges上抛出异常:“AcceptChanges无法继续,因为对象的键值与ObjectStateManager中的另一个对象发生冲突。在调用AcceptChanges之前,确保键值是唯一的。我确认了deleteobject调用的作品。我如何让对象管理者知道记录已经消失并可以重新插入?Addto * - deleteobject - addto *会抛出错误

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

回答

1

进一步的研究表明,你必须分离()的对象(记录)您添加到状态管理器为它真正忘掉它,即使这样做后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);