NHibernate/Castle.ActiveRecord;删除失败,因为行已在同一事务中更新

NHibernate/Castle.ActiveRecord;删除失败,因为行已在同一事务中更新,nhibernate,castle-activerecord,Nhibernate,Castle Activerecord,现在真是疯了。我试图删除一些相互之间具有hirachical关系的对象,但不知何故,NHibernate(或ActiverRecord)首先更新关系(foreigen键),然后在同一事务中尝试删除,但由于并发检查(乐观锁定全部),删除失败 我的类的伪代码: [ActiveRecord] public class Box : ActiveRecordBase { [PrimaryKey] public virtual int BoxId{get;set;} [BelongsTo]

现在真是疯了。我试图删除一些相互之间具有hirachical关系的对象,但不知何故,NHibernate(或ActiverRecord)首先更新关系(foreigen键),然后在同一事务中尝试删除,但由于并发检查(乐观锁定全部),删除失败

我的类的伪代码:

[ActiveRecord]
public class Box : ActiveRecordBase
{
  [PrimaryKey]
  public virtual int BoxId{get;set;}
  [BelongsTo]
  public virtual Box TopLevelBox{get;set;}
  [BelongsTo]
  public virtual Box Parent {get;set;}
  [HasMany]
  public virtual IList<Box> Children {get;set;}
  [HasMany]
  public virtual IList<Content> Conten{get;set;}
}

[ActiveRecord]
public class Content : ActiveRecordBase
{
  [PrimaryKey]
  public virtual int ContentId{get;set;}
  [BelongsTo]
  public virtual Box Box{get;set;}
}
当我让NHibernate输出时,它会做以下愚蠢的事情:

UPDATE box1 SET toplevelbox = NULL WHERE [optimistic locking all checks];
UPDATE box2 SET parent = NULL, toplevelbox = NULL WHERE [optimistic locking all checks];
UPDATE box3 SET parent = NULL, toplevelbox = NULL WHERE [optimistic locking all checks];
UPDATE content1 SET box = NULL WHERE [optimistic locking all checks];
UPDATE content2 SET box = NULL WHERE [optimistic locking all checks];
UPDATE content3 SET box = NULL WHERE [optimistic locking all checks];
DELETE box1 WHERE [optimistic locking all checks but with] AND topleveobox = box1;
// Of cause this last check fails and my transaction get's a rollback
这里是什么?如何阻止NHibernat(或ActiveRecord)进行愚蠢的更新

我真的很绝望,需要帮助

问候


你要找的是相反的。然后,多对一部分对协会负责。注意:必须注意始终保持框的父引用

[HasMany(Inverse = true)]
public virtual IList<Box> Children {get;set;}
[HasMany(Inverse = true)]
public virtual IList<Content> Content {get;set;}
[HasMany(Inverse=true)]
公共虚拟IList子项{get;set;}
[HasMany(倒数=真)]
公共虚拟IList内容{get;set;}
[HasMany(Inverse = true)]
public virtual IList<Box> Children {get;set;}
[HasMany(Inverse = true)]
public virtual IList<Content> Content {get;set;}