NHibernate从另一个实体集合中级联删除

时间:2010-03-11 13:04:50

标签: nhibernate fluent-nhibernate

我有这些课程:

public class User
{
  public IList<Order> LastOrders { get; set;}
}

public class Order {}

LastOrders是多对多地图。

当我删除订单时,如何判断(Fluent)NHibernate从所有用户的LastOrders集合中删除Order?有可能吗?

即(跳过数据库保存/加载代码)

user.LastOrders.Add(order);
Session.Delete(order);
Assert(!user.LastOrders.Contains(order));

目前我在删除之前手动执行(查找用户,更新集合,保存)。如果没有这个,NHibernate就无法删除Order,因为它被用户的LastOrders引用。

1 个答案:

答案 0 :(得分:0)

如果将集合映射设置为忽略缺失的行,则可以安全地删除该订单。

这将在集合表中留下孤立的行,NHibernate将忽略这些行。这些可以在一些批处理过程中清理。

HasManyToMany(x => x.LastOrders)
    .NotFound.Ignore();

这将为您提供比当前方法更快的删除。缺点是您的收集表在一段时间内与您的模型不一致。