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();
}