среда, 21 мая 2014 г.

Инструкции по обновлению, вставке или удалению из хранилища затронули непредвиденное число строк ({0})

Окружение

Visual Studio 2012
EF 5
MS SQL Server 2008

При добавлении записи в таблицу возникает ошибка

Инструкции по обновлению, вставке или удалению из хранилища затронули непредвиденное число строк ({0}). Сущности могли быть изменены или удалены с момента их загрузки. Обновите записи диспетчера ObjectStateManager

Как искал

В русскоязычном сообществе почти ничего не нашел

нашел занятный сайт - переводчик ошибок
http://finderr.net/clr/ru/%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D0%B8-%D0%BF%D0%BE-%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8E-%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B5-%D0%B8%D0%BB%D0%B8-%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D1%8E-%D0%B8%D0%B7-%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D0%BB%D0%B8%D1%89%D0%B0-%D0%B7%D0%B0%D1%82%D1%80%D0%BE%D0%BD%D1%83%D0%BB%D0%B8-%D0%BD%D0%B5%D0%BF%D1%80%D0%B5%D0%B4%D0%B2%D0%B8%D0%B4%D0%B5-/17429932

Далее искал уже по ошибке

Store update, insert, or delete statement affected an unexpected number of rows ({0}). Entities may have been modified or deleted since entities were loaded. Refresh ObjectStateManager entries.

Свел возможные варианты решения

1. Вы не указываете значение первичного ключа при записи.
Проверьте. если дейстительно первичный ключ нулл - задайте его явно (часто ребята забывают возвращать его из формы, или при database сценарии указывают это поле как пропускаемое)

если у вас этот вариант - смотрите ссылки
http://rpelepei.blogspot.com/2010/05/0.html
или
http://stackoverflow.com/questions/1836173/entity-framework-store-update-insert-or-delete-statement-affected-an-unexpec

2. Ошибки многопользовательской работы
http://stackoverflow.com/questions/1836173/entity-framework-store-update-insert-or-delete-statement-affected-an-unexpec

3. Побочные эффекты триггеров

http://stackoverflow.com/questions/6819813/solution-for-store-update-insert-or-delete-statement-affected-an-unexpected-n

http://stackoverflow.com/questions/5820992/error-when-inserting-into-table-having-instead-of-trigger-from-entity-data-frame

http://www.britishdeveloper.co.uk/2010/06/entity-framework-optimisticconcurrencye.html

У меня был третий вариант. опишу поподробнее:
Сразу оговорюсь, что игра с SET NOCOUNT ON/OFF мне не помогла.
Также не помог фиктивный  селект в конце триггера.

Таблица заказов ORDER
на ней висит триггер на Insert.
Триггер в свою очередь вызывал хранимую процедуру (синхронизация с таблицей пользователей) в которой делалась выборка из заказа (ORDER) которая не возвращала записей.
Оказалось этот селект и мешал Entity Framework'у нормально работать.

Что сделал: я переделал логику так чтобы не было пустых селектов из исходной таблицы



1 комментарий:

  1. Спасибо!
    У меня как раз третий вариант!
    Пришлось поменять триггер с Before Insert на After Insert

    ОтветитьУдалить