使用NHibernate限制删除

时间:2010-04-22 10:12:30

标签: sql nhibernate fluent-nhibernate nhibernate-mapping

我正在使用NHibernate(流畅)访问一个旧的第三方数据库,其中有一堆表,这些表没有任何明确的相关关系。这是一个子表确实有parentID列,其中包含父表的主键,但没有外键关系确保这些关系。理想情况下,我想添加一些外键,但无法触及数据库架构。

我的应用程序工作正常,但我真的想强加一个参照完整性规则,如果他们有孩子,就禁止删除父对象,e.i。类似'ON DELETE RESTRICT'但由NHibernate维护。

任何有关如何处理此问题的想法都将受到赞赏。我应该查看IInterceptor接口上的OnDelete()方法,还是有其他方法可以解决这个问题?

当然,任何解决方案都会带来性能损失,但我可以忍受。

1 个答案:

答案 0 :(得分:1)

我想不出在NHibernate中这样做的方法,因为它需要NHibernate对关系有一些了解。我会使用sepecification pattern在代码中处理此问题。例如(使用带有Employee对象链接的Company对象):

public class CanDeleteCompanySpecification
{
    bool IsSatisfiedBy(Company candidate)
    {
        // Check for related Employee records by loading collection
        // or using COUNT(*).
        // Return true if there are no related records and the Company can be deleted.
        // Hope that no linked Employee records are created before the delete commits.
    }
}