我有以下代码:
using (var session = SessionFactory.OpenSession())
{
var entity = session.Get<Entity>(id);
entity.Property1 = "new value";
using (var tx = session.BeginTransaction())
{
entity.Property2 = "new value";
tx.Commit();
}
}
现在,我很困惑,当tx.Commit()
时,会对数据库做什么?
是仅提交Property2
(在事务范围部分中),还是提交Property1
和Property2
?
答案 0 :(得分:2)
在刷新会话时,您对持久对象所做的任何更改都将发送到数据库,并且提交事务将刷新会话。请注意,在某些情况下可能会自动刷新会话,例如使用数据库生成的标识符或发出查询时。
令人困惑的是,在NHibernate中,您可以拥有仅包含提交的事务块。为了便于阅读,我将其重写为:
using (var session = SessionFactory.OpenSession())
{
using (var tx = session.BeginTransaction())
{
var entity = session.Get<Entity>(id);
entity.Property1 = "new value";
entity.Property2 = "new value";
tx.Commit();
}
}
答案 1 :(得分:0)
将提交实体的所有属性。在您的配置中,您可以设置一个将sql输出到控制台的设置,您可以看到它在每次提交时发送的查询。