сбит с толку, почему изменения моих сущностей отражаются без совершения? - PullRequest
1 голос
/ 19 декабря 2009

Я использую 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, хотя, поскольку БД устарела, пока запрос не закончится и не передаст в БД ??

1 Ответ

1 голос
/ 19 декабря 2009

Если первичный ключ вашей сущности - это столбец идентификаторов, это нормальное поведение, поскольку NHibernate ДОЛЖЕН сохранять данные в базе данных, чтобы получить идентификатор сущности, чтобы он мог поместить ее в свой сеанс. Это относится ко всем генераторам пост-вставки. Если вы не хотите, чтобы это происходило, а также чтобы получить множество других преимуществ, вам следует выбрать один из генераторов стилей ORM, например, HiLo / Sequence HiLo Generator

Посмотрите на это для получения дополнительной информации:

http://nhforge.org/blogs/nhibernate/archive/2009/03/20/nhibernate-poid-generators-revealed.aspx

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