nHibernate не генерирует исключения, когда ожидается (вызывая Save для сущности в коллекции)? - PullRequest
0 голосов
/ 27 апреля 2011

Я только начинаю использовать nHibernate, и какое-то поведение немного беспокоит, так как оно, по-видимому, не вызывает исключений, когда вы пытаетесь выполнить какое-либо действие, если вы либо правильно его кодировали, либо у вас есть ошибка конфигурации.

Например, у меня есть некоторый код:

        ISessionFactory sessions = SessionManager.SessionFactory;
        ISession session = sessions.OpenSession();
        ITransaction tx1 = null;
        tx1 = session.BeginTransaction();
        IList<BusinessUnit> businessUnits = session.QueryOver<BusinessUnit>().List();
        System.Diagnostics.Debug.WriteLine("Count: " + businessUnits.Count);
        businessUnits[0].Name += "z";
        session.Save(businessUnits[0]);
        if (tx1 != null) tx1.Commit();
        session.Close();

Когда я впервые закодировал его, я не включил использование транзакции:

tx1 = session.BeginTransaction();  
if (tx1 != null) tx1.Commit();

Так что, по-видимому,если транзакция отсутствует, nHibernate не (по крайней мере, в соответствии с моей конфигурацией) автоматически создает ее.Что хорошо, я полагаю.

Но что меня беспокоит, так это то, что если требуется транзакция и вы пытаетесь выполнить функцию Save () без , почему она не выдает исключение?

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

Может быть, есть какие-то настройки конфигурации, которые я пропускаю, когда исключаются исключения, или нужно, чтобы человек все тестировал, так как нельзя предположить, что какое-либо поведение работает?

1 Ответ

0 голосов
/ 27 апреля 2011

В ранее существовавшем объекте функция Save () автоматически не фиксируется в базе данных, в приведенном выше примере требуется вызов:

Session.flush();

Если кто-то использует транзакцию, то вызов .Commit () для транзакции вызывает flush ().

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...