NHibernate:对附加实体进行显式更新调用

时间:2011-03-06 16:50:25

标签: nhibernate

似乎我已经使用NHibernate一段时间了,我仍然误解了这个ORM的一些基本概念。假设我有一个名为“Blog”的类,我加载一个像这样的持久化实例:

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

    tx.Commit();
}

如果我现在更改此实例的属性,NHibernate似乎会自动检测未保存的更改,并在事务提交时生成UPDATE。

这导致以下陈述完全相同:

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-method存在以及何时应该使用它呢?

1 个答案:

答案 0 :(得分:1)

实体并不总是与会话相关联。例如,您可以使用带有方法的webservice,接受某个实体,以及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。