似乎我已经使用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存在以及何时应该使用它呢?
答案 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。