我刚刚发现,如果我从NHibernate会话中获取一个对象并更改对象的属性,NHibernate会在没有调用的情况下自动更新提交对象Session.Update(myObj)!
我可以看到这可能会有所帮助,但作为默认行为,它似乎很疯狂!
更新:我现在理解持久性无知,所以这种行为现在显然是首选.我会在这里留下这个令人尴尬的问题,希望能帮助其他亵渎用户.
我怎么能阻止这种情况发生?这是默认的NHibernate行为还是来自Fluent NHibernate的AutoPersistenceModel?
如果没有办法阻止这个,我该怎么办?除非我忽略了这一点,否则这种行为似乎会造成一个混乱.
我从2009年8月18日开始使用NHibernate 2.0.1.4和Fluent NHibernate构建
难道这家伙的权利与他的回答?
我还读过,重写事件监听器可能是解决这个问题的方法.但是,IDirtyCheckEventListener.OnDirtyCheck在这种情况下不会被调用.有谁知道我需要覆盖哪个监听器?
我注意到,通过使用log4net,在调用ISession.Update时,它会更新所有已更改的对象.
例如:
// Change 2 instances
user1.IsDeleted = true;
user2.UserName = "Xyz";
// Call session.Update to update the 2 users
using (ITransaction transaction = session.BeginTransaction())
{
Session.Update(user1); // This updates both user1 & user2
transaction.Commit();
}
using (ITransaction transaction = session.BeginTransaction())
{
Session.Update(user2); // Now there is no need for this
transaction.Commit();
}
Run Code Online (Sandbox Code Playgroud)
这是NHibernate的默认行为还是与我的映射文件有关?
我可以逐个进行NHibernate更新吗?