使用Session.Delete()删除的Nhibernate对象始终在集合删除之前处理

时间:2013-08-21 14:17:36

标签: nhibernate

我有两个实体与一个赋值实体绑在一起。例如

class School 
{
  public virtual IList<Enrollment> Enrollments
  {
      get { return enrollments; }
  }

  public virtual void UnassignEnrollment(Student theStudent)
  {
      var e = enrollments.FirstOrDefault(x => x.Student == x);
      enrollments.Remove(e);
  }

}

class Student
{
   public virtual String Name { get; set; }
}

class Enrollment
{
   public virtual Student Student 
   {
      get { return student; }
   }

   public virtual School School 
   {
      get { return student; }
   }
}

注册的映射

<bag name="Enrollments" cascade="all-delete-orphan" inverse="true" access="nosetter.camelcase" lazy="true">
  <key column="School_Guid" />
  <one-to-many class="SBL.Enrollment, SBL" />
</bag>

现在,当我想删除学生时,我基本上是在做以下

foreach(var school in assignedSchools)
   school.UnassignEnrollment(student);
Session.Delete(student);

我看到的问题是nhibernate会在注册之前尝试删除学生,即使我在删除学生之前孤立注册(因为Session.Delete会立即将删除操作添加到操作队列但添加了孤立对象)在刷新/提交之后的一些进程之后,这会导致数据库层中的引用问题。

我可以让它在调用Delete()之前刷新会话,但我想避免手动刷新。我也可以通过双向映射和级联删除注册与删除学生来实现它,但我会将集合映射为删除内容的方式 - 我想避免的事情。

如何通过执行删除或数据建模的方式来解决这个问题?

0 个答案:

没有答案