NHibernate: явный вызов обновления для присоединенной сущности - PullRequest
1 голос
/ 06 марта 2011

Кажется, что хотя я уже некоторое время использую NHibernate, я все еще неправильно понимаю некоторые основные концепции этого ORM. Допустим, у меня есть класс с именем «Блог», и я загружаю постоянный экземпляр следующим образом:

using (var tx = Session.BeginTransaction())
{
    var myBlog = Session.Get(10);

    tx.Commit();
}

Если я сейчас изменю свойство этого экземпляра, NHibernate, кажется, автоматически обнаружит несохраненные изменения и выдаст ОБНОВЛЕНИЕ при фиксации транзакции.

Это приводит к тому, что следующие операторы делают то же самое:

using (var tx = Session.BeginTransaction())
{
    var myBlog = Session.Get(10);
    myBlog.Title = "Changed title";

    tx.Commit();
}

using (var tx = Session.BeginTransaction())
{
    var myBlog = Session.Get(10);

    myBlog.Title = "Changed title";
    Session.Update(myBlog); // why is this necessary?

    tx.Commit();
}

Я не вижу никакой разницы с NHProf. Так почему же существует явный метод Update и когда я должен его использовать?

1 Ответ

1 голос
/ 06 марта 2011

Сущности не всегда связаны с сеансом.Например, у вас может быть веб-сервис с методом, который принимает некоторую сущность, и обновления в db:

[WebMethod]
void UpdatePerson(int id, string name){
    using (var tx = Session.BeginTransaction(){
        var person = new Person(id, name);
        Session.Update(person);
        tx.Commit();
    }
}

Этот код выполняет обновление в базе данных без выдачи select.

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