Entity Framework 6 (ASP.NET MVC) блокирует все приложение

когда ошибка генерируется инфраструктурой entity (т.е. максимальная длина не соблюдается), каждый вызов SaveChanges() генерирует старое сообщение об ошибке, не позволяя корректно выполнить новый запрос sql.

Каждый пользователь тронут и требуется перезагрузка приложения!

Что мне не хватает?

Вот какой код:

Society _new = new Society ()
 {
 Nom = "TEST TEST TEST TEST TEST", // MAX LENGTH 10
 Adresse = "45, rue Paris", 
 .... 
 };

 try
 {
 context.Society.Add(_new);
 context.SaveChanges(); 
 }
 catch (System.Data.Entity.Validation.DbEntityValidationException dbEx)
 { 
 //handle error
 }
 catch (Exception e)
 {
 //handle error
 }

После ошибки возникает каждый раз, когда я вызываю context.SaveChanges(); (даже для других объектов) Entity генерирует те же ошибки, как если бы контекст застрял.

2 ответа

Ошибка вызвана тем, что я всегда использовал один и тот же DbContext.

Таким образом (поэтому никогда не вызывая метод.Dispose()), ошибка блокировала единственный контекст, который я использовал.

Метод службы должен использовать один и тот же экземпляр DbContext на протяжении всей транзакции. Это делается так, что все изменения, внесенные в вашу постоянную модель, отслеживаются и либо передаются в базовое хранилище данных, либо откатываются атомным способом.

Для получения дополнительной информации: http://mehdi.me/ambient-dbcontext-in-ef6/


Вероятно, из-за того, что вы добавили неверный объект в контекст и событие после ловушек ошибок, этот объект все еще присутствует в контексте, поэтому в следующем вызове ошибки SaveChanges() появляется слишком

licensed under cc by-sa 3.0 with attribution.