NHibernate Get (), затем Flush или Commit? - PullRequest
0 голосов
/ 15 апреля 2011

FlushMode объекта ISession - FlushMode.Commit.

Я использую шаблон единицы работы и репозитория, как здесь определено: http://nhforge.org/wikis/patternsandpractices/nhibernate-and-the-unit-of-work-pattern.aspx

Я помню, как видел некоторые примеры, когда некоторые люди называютЗа Get () сразу следует Flush или фиксация транзакции.Мы просто не в курсе, или есть причина для этого?

Из моего теста:

    [TestMethod]
    public void TestMethod1()
    {
        Employee e;

        IRepository<Employee> empRepo;
        using(UnitOfWork.Start(Enums.Databases.MyDatabase))
        {
            empRepo = new Repository<Employee>();
            e = empRepo.GetByID(21);
        }

        Debug.WriteLine(e.UserName);
    }

Моя функция репозитория GetByID просто вызывает Session.Get (id) иЯ могу просмотреть имя пользователя в окне вывода (после того, как сессия прервана) ... так какой смысл какой-либо тип Flush или транзакции после Get ()?Я бы понял, если бы где-нибудь был спасбросок.

1 Ответ

2 голосов
/ 15 апреля 2011

NHibernate предполагает, что все операции с базами данных выполняются внутри транзакций, поэтому люди используют их явно, вместо того, чтобы NHibernate СУБД использует их неявно.

Айенде объясняет это более подробно в своем посте NH Prof Alerts: Использование скрытых транзакций не рекомендуется .

Редактировать: узнал что-то новое сегодня. Это не NHibernate, использующий неявные транзакции, а БД.

...