Я использую nhiberate, с шаблоном хранилища.
например. MakePersistance выглядит так:
public T MakePersistent(T entity)
{
Session.Save(entity);
return entity;
}
В httpmodule начальный запрос:
ISession session = NHibernateHelper.OpenSession();
session.BeginTransaction();
CurrentSessionContext.Bind(session);
Конец запроса:
ISession session = CurrentSessionContext.Unbind(
NHibernateHelper.SessionFactory);
if (session != null)
try
{
session.Transaction.Commit();
}
catch (Exception ex)
{
session.Transaction.Rollback();
//Server.Transfer("...", true);
}
finally
{
session.Close();
}
Таким образом, при каждом запросе страницы транзакция начинается и заканчивается.
Из того, что я понял, это означает, что если я обновлю сущность, а затем выполню запрос для этой сущности после обновления, запрос вернет исходное состояние сущности, поскольку обновление не было зафиксировано в базе данных.
Но я проверил (и просмотрел в sql profiler), что БД выполняет обновление, а затем поиск того же объекта является новым / актуальным.
Так я и сделал:
Entity e = EntityDao.GetById(1);
// e.count outputs 0
e.Count += 1;
// e.count outputs 1 as expected
EntityDao.MakePersistant(entity);
entity = EntityDao.GetById(1); // getting from the db again
// e.count ouputs 1 ***
Не должно ли быть 0, хотя, поскольку БД устарела, пока запрос не закончится и не передаст в БД ??