我正在使用NHibernate(流畅)访问一个旧的第三方数据库,其中有一堆表,这些表没有任何明确的相关关系。这是一个子表确实有parentID列,其中包含父表的主键,但没有外键关系确保这些关系。理想情况下,我想添加一些外键,但无法触及数据库架构。
我的应用程序工作正常,但我真的想强加一个参照完整性规则,如果他们有孩子,就禁止删除父对象,e.i。类似'ON DELETE RESTRICT'但由NHibernate维护。
任何有关如何处理此问题的想法都将受到赞赏。我应该查看IInterceptor接口上的OnDelete()方法,还是有其他方法可以解决这个问题?
当然,任何解决方案都会带来性能损失,但我可以忍受。
答案 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.
}
}