0

基本上我插入一行,删除该行,然后再次插入一个具有相同键的新行。它将在最后一行 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);
4

1 回答 1

1

进一步的研究表明,您必须 Detach() 您添加到状态管理器的对象(记录)才能真正忘记它,即使在执行 DeleteObject() 之后也是如此。因此,可以让您添加记录、删除记录、使用相同键添加记录的代码如下所示:

    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);
于 2011-01-28T19:39:35.383 回答