Я создаю большое количество сущностей с помощью NHibernate, присоединяю их к моей сессии ISession и затем использую транзакцию для фиксации моих изменений в базе данных. Пример кода ниже:
ISession _context = SessionProvider.OpenSession();
//Create new entities
for(int i=0; i<100; i++)
{
MyEntity entity = new MyEntity(i);
//Attach new entity to the context
_context.Save(entity);
}
//Persist all changes to the database
using(var tx = _context.BeginTransaction())
{
//Flush the session
tx.Commit();
}
У меня сложилось впечатление, что строка _context.Save () просто информирует ISession о новой сущности, но изменения в базе данных не сохраняются до тех пор, пока я не сброслю сеанс с помощью строки tx.Commit ().
Однако я заметил, что база данных получает новую сущность каждый раз, когда я вызываю _context.Save (). В результате я получаю слишком много отдельных обращений к базе данных.
Кто-нибудь знает, почему ISession.Save () автоматически сохраняет изменения? Я неправильно понял что-то о том, как ведет себя NHibernate? Спасибо.
*** РЕДАКТИРОВАТЬ - Просто чтобы уточнить (в свете двух предложенных ответов) - моя проблема здесь в том, что база данных обновляется, как только я вызываю _context.Save (). Я не ожидаю, что это произойдет. Я ожидаю, что ничего не будет вставлено в базу данных, пока я не вызову tx.Commit (). К сожалению, ни один из двух предложенных ответов пока не помогает в этом.
Некоторую полезную информацию о генераторах идентичности можно найти здесь