使用NHibernate限制删除
问题描述:
我正在使用NHibernate(流利)以一堆表格访问旧的第三方数据库,这些表格与任何显式方式都没有关系。这是一个子表有parentID列,其中包含父表的主键,但没有外键关系确保这些关系。理想情况下,我想添加一些外键,但不能触及数据库模式。使用NHibernate限制删除
我的申请工作正常,但我真的很喜欢强加一个参照完整性规则,如果他们有孩子,e.i.将禁止删除父对象。类似的'ON DELETE RESTRICT',但由NHibernate维护。
任何想法如何处理这将不胜感激。我应该看看IInterceptor接口上的OnDelete()方法,还是有其他解决方法?
当然,任何解决方案都会带来性能损失,但我可以忍受这一点。
答
我不能想到在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.
}
}