Nhibernate Can';t在没有事务的情况下更新对象

Nhibernate Can';t在没有事务的情况下更新对象,nhibernate,Nhibernate,我对这段代码有问题 如果我不使用该事务(我在该代码中对此进行了注释),则不会进行更新 using (var session = Repository.TSession()) { var utilisateurDal = new UtilisateurDal(session); var utilisateur = utilisateurDal.GetUtilisateur(login); if (utilisateur != null) { //var transactio

我对这段代码有问题 如果我不使用该事务(我在该代码中对此进行了注释),则不会进行更新

using (var session = Repository.TSession())
{
  var utilisateurDal = new UtilisateurDal(session);
  var utilisateur = utilisateurDal.GetUtilisateur(login);
  if (utilisateur != null)
  {
    //var transaction = Session.BeginTransaction();
    utilisateur.MotDePasse = "test";
    session.Update(utilisateur);
    //transaction.Commit();
  }
}
检索要更新的对象的代码: (请注意,登录名不是唯一标识符)

你知道这种行为的含义吗


问候

NHibernate不会立即发送Update语句,并将其缓存。在下一个
session.Flush()
中,所有更新都一起发送以保存往返
transaction.Commit()
将刷新对数据库的所有更改,否则数据库中的Commit不会知道更新

您甚至可以省略
会话.Update(usilisateur)Flush()
时将所有更改发送到db

使用事务或调用会话。Flush();在更新结束时。

这可能看起来像这样

using (var session = Repository.TSession())
using (var transaction = Session.BeginTransaction())
{
    var utilisateurDal = new UtilisateurDal(session);
    var utilisateur = utilisateurDal.GetUtilisateur(login);
    if (utilisateur != null)
    {
        utilisateur.MotDePasse = "test";
    }
    transaction.Commit();
}

did调用session.flush工作良好如果我没有放置session.flush(也没有使用事务),对象将不会在数据库中更新。这是一种标准行为吗?
NHibernate.Event.Default.DefaultSaveOrUpdateEventListener: 2011-11-16 14:14:57,832 [35] DEBUG NHibernate.Event.Default.DefaultSaveOrUpdateEventListener [(null)] - ignoring persistent instance
NHibernate.Event.Default.DefaultSaveOrUpdateEventListener: 2011-11-16 14:14:57,833 [35]     DEBUG NHibernate.Event.Default.DefaultSaveOrUpdateEventListener [(null)] - object already associated with session: [BusinessObjets.Utilisateur#3]
using (var session = Repository.TSession())
using (var transaction = Session.BeginTransaction())
{
    var utilisateurDal = new UtilisateurDal(session);
    var utilisateur = utilisateurDal.GetUtilisateur(login);
    if (utilisateur != null)
    {
        utilisateur.MotDePasse = "test";
    }
    transaction.Commit();
}