Addto * - deleteobject - addto * выдаст ошибку - PullRequest
0 голосов
/ 24 января 2011

Обычно я вставляю строку, удаляю эту строку, затем снова вставляю новую строку с тем же ключом. Он выдаст исключение в последней строке savechanges: «AcceptChanges не может продолжаться, потому что значения ключа объекта конфликтуют с другим объектом в ObjectStateManager. Убедитесь, что значения ключа уникальны, прежде чем вызывать AcceptChanges». Я подтвердил, что вызов 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.SaveChanges(true);

        Maps _sameMaps = new Maps();

        _sameMaps.map_page = "BLA";
        _sameMaps.descr = "BLA test";
        opendb.AddToMaps(_sameMaps);

        opendb.SaveChanges(true);

1 Ответ

1 голос
/ 28 января 2011

Дальнейшие исследования показывают, что вам необходимо отсоединить () объект (запись), который вы добавили в диспетчер состояний, чтобы он действительно забыл об этом даже после выполнения 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);
...