我对这段代码有问题如果我不使用该事务(我在该代码中注释),则不会发生更新.
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();
}
}
Run Code Online (Sandbox Code Playgroud)
检索要更新的对象的代码:(请注意,登录不是唯一标识符)
public Utilisateur GetUtilisateur(ISession session, string login)
{
return session.Query<Utilisateur>().SingleOrDefault(u => u.Identifiant == login);
}
Run Code Online (Sandbox Code Playgroud)
当我启用调试模式时,我有这样的消息:
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]
Run Code Online (Sandbox Code Playgroud)
你是这种行为的意思吗?
问候
NHibernate不会立即发送Update语句并将其缓存.在接下来的session.Flush()所有更新中一起发送以保存往返.transaction.Commit()将刷新所有对db的更改,否则db中的提交将不知道更新.
您甚至可以省略,session.Update(utilisateur);因为会话跟踪通过它加载的实体,并将在下一次发送所有更改到db Flush().
使用事务或调用session.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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1638 次 |
| 最近记录: |