2010-04-22 68 views
1

我正在使用NHibernate(流利)以一堆表格访问旧的第三方数据库,这些表格与任何显式方式都没有关系。这是一个子表有parentID列,其中包含父表的主键,但没有外键关系确保这些关系。理想情况下,我想添加一些外键,但不能触及数据库模式。使用NHibernate限制删除

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

任何想法如何处理这将不胜感激。我应该看看IInterceptor接口上的OnDelete()方法,还是有其他解决方法?

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

回答

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. 
    } 
}