Addto * - deleteobject - addto *将抛出错误

时间:2011-01-24 20:38:56

标签: entity-framework savechanges

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

1 个答案:

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