Entity Framework - проблема оптимистичного параллелизма - PullRequest
4 голосов
/ 25 мая 2010

У меня есть служба Windows, которая запускается каждые 10 секунд ... каждый раз, когда она запускается, она берет некоторые тестовые данные, изменяет их и сохраняет в базе данных, используя EntityFramework.Однако при каждом втором запуске, когда я пытаюсь сохранить изменение, я получаю следующее исключение оптимистического параллелизма: -

Оператор сохранения, вставки или удаления в хранилище затронул неожиданное количество строк (0).Объекты могут быть изменены или удалены с момента загрузки объектов.Обновление записей ObjectStateManager

Я точно знаю, что в эту БД ничего не пишет, кроме моей службы, которая обновляет записи каждые 10 секунд.Что может быть причиной исключения параллелизма здесь?

Я думаю, что связанная сущность где-то в графе объектов модифицировалась до второй операции сохранения.Все, что я на самом деле делаю, - это создаю экземпляр нового контекста объекта и вызываю операцию сохранения для некоторых записей, которые я извлек, используя тот же контекст.Следующий код работал ---

var ctx = new blahEntities();
var profile = ctx.ProfileSet.Where(pr=>pr.FirstName.Contains("a")).FirstOrDefault();
profile.Address = "modified";
ctx.SaveChanges();
ctx.Refresh(RefreshMode.StoreWins,profile);

Ответы [ 2 ]

6 голосов
/ 25 мая 2010

«Неожиданное количество строк (0)» указывает на то, что, скорее всего, у вас нет поля идентификатора, правильно сопоставленного или определенного в вашей модели сущности, или вы изменяете отдельную сущность и пытаетесь сохранить ее, и это не нет ключевой информации.

Запустите профилировщик SQL Server или Entity Framework Profiler и посмотрите, что происходит в фоновом режиме.

2 голосов
/ 25 мая 2010

Однажды возникла та же проблема, и он часами отыскивал ее до неисправного триггера обновления. Если у вас есть какие-либо триггеры в обновляемой таблице, убедитесь, что они работают правильно. Я работаю в среде Oracle, fwiw.

...