Entity Framework SaveChanges зависает в программе

Мой код довольно прост:

Context.AddObject("EntitiesSetName", newObjectName);
Context.SaveChanges();

Сработало нормально, но только один раз — первый. Тогда я прервал свою программу по Shift+F5 после того, как SaveChanges() был отслежен. Это был процесс отладки, поэтому я вручную удалил вновь созданную запись из БД и снова запустил программу в режиме отладки. Но больше не работает — «зависает» при вызове SaveChanges().

Еще одна странная вещь, которую я вижу: если я пишу до того, как addObject() и SaveChanges() вызываются что-то вроде:

var tempResult = (from mydbRecord in Context 
                  where Context.myKey == 123 
                  select mydbRecord.myKey).Count(); 
// 123 is the key value of the record that should be created before the program hangs.

tempResult будет иметь следующее значение: 1.

Итак, вроде бы запись создана (когда программа зависла) и теперь существует, но когда я проверяю БД вручную другими средствами - ее нет!

Что я делаю неправильно? Это какая-то проблема с кешем или что-то еще?

ИЗМЕНИТЬ:

Я нашел источник проблемы. Это была проблема вовсе не EF, а проблема инструмента, который я использую для управления базой данных вручную (Benthic).

Моя программа попадает в какой-то тупик (когда я вызываю SaveChanges()) с инструментом, когда инструмент подключен к той же БД.

Итак, проблема в области синхронизации, имхо, так что мой вопрос можно пометить как решенный.


person user1622345    schedule 03.11.2012    source источник
comment
Почему бы вам не использовать Context.TypeClassName.Add(newObjectName); я полагаю, это быстрее, чем код, который вы используете   -  person radu florescu    schedule 03.11.2012
comment
Вы имеете в виду Context.EntitySetName.AddObject(newObjectName)? Насколько я знаю, это просто оболочка для моего метода.   -  person user1622345    schedule 03.11.2012
comment
Да, это то, что я обычно использую. Если вы делаете запрос к объектам базы данных, вам не нужно использовать saveChanges   -  person radu florescu    schedule 03.11.2012
comment
В UOW есть сущность, которую вы вставили в память, но она еще не зафиксирована в базе данных.   -  person radu florescu    schedule 03.11.2012
comment
Я не уверен, что правильно вас понял, так как же я могу зафиксировать мою новую запись в базе данных без SaveChanges()? Мне действительно нужно добавить туда новую запись, а AddObject() этого не делает.   -  person user1622345    schedule 03.11.2012
comment
Я думал, вы используете Сохранить изменения для объектов запроса. Так что нет, вы должны использовать SaveChanges для сохранения добавленного объекта.   -  person radu florescu    schedule 03.11.2012
comment
У меня такая же проблема с Oracle/SQL Developer. Если я выполняю некоторые вставки в SQL Developers, но не фиксирую или не откатываюсь, а затем из своего приложения пытаюсь вставить новые и сохранить изменения... тогда я получаю тупик. Странно... Я бы ожидал какую-нибудь ошибку, как в MSSQL 1205: Процесс стал жертвой взаимоблокировки... БЛАБЛА!   -  person Learner    schedule 27.01.2014
comment
У меня такая же проблема с Oracle. Использование .Net core EF   -  person The Anh Nguyen    schedule 18.05.2020