У меня есть приложение. Net 461, использующее NHibernate 4.0.4.4000
Вчера у нас была проблема, когда серверу AWS EC2 не хватало памяти и возникали случайные исключения. Из того, что я могу, казалось, что проблема была из-за тайм-аутов, пытающихся выполнить запросы базы данных к экземпляру RDS. Другой экземпляр EC2 также выдал пару ошибок при попытке подключиться к той же RDS.
Были транзакции, которые не удалось из-за TransactionException: Begin failed with SQL exception ---> System.TimeoutException: Dns hostname lookup timeout. Increase Timeout value in ConnectionString.
, поэтому для меня это выглядит как проблема с сетью, а не проблема приложения ( кроме того, чтобы сделать приложение достаточно умным, чтобы иметь возможность справляться с этими ошибками).
Теперь, когда исследуем проблему, наш администратор БД вернулся к сообщению, что экземпляр RDS выглядит нормально, и это, вероятно, проблема приложения. Меня беспокоит то, что эти приложения работали более 5 месяцев (эта версия), а более старые версии работали годами без этих ошибок.
Администратор БД отметил исключение "Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect):"
относительно того, почему он считает, что приложение в вине.
У меня такой вопрос: Как объяснить ошибку, вызванную перегрузкой сети (плохая конечная точка и т. Д. c ...), а не только тайм-аут DNS Я хочу выяснить, как NHibernate может попасть в эту ситуацию.
Я бы подумал, что в случае сбоя и перезапуска приложения новый сеанс NHibernate к БД должен получить новый набор последовательностей для вставки записей и т. Д. c ... поэтому существует не должно быть грязных объектов в системе. Насколько я понимаю, любые объекты, состояние которых не сохранено в базе данных, будут просто потеряны, и что новый сеанс будет вспоминать объекты из базы данных перед началом любой работы. Это должно означать, что их состояние не грязное.
Может быть, я упускаю что-то очевидное здесь, у меня не было большого опыта работы с NHibernate.