C# NHibernate删除实体-检查引用

C# NHibernate删除实体-检查引用,c#,nhibernate,reference,C#,Nhibernate,Reference,当用户将删除一个实体,但由于存在对该实体的引用而无法删除该实体时,是否有一种通用解决方案来检查引用? 我在寻找一种在所有情况下都有效的解决方案。如果用户尝试删除,我可以签入我的DataAccess层,并向用户提供一条无法删除的消息实体,因为存在引用。如何解决此问题?您需要映射相关实体,并包括cascade='all-delete-orphan'选项。如果您不需要知道引用是什么,您可以在DAL中捕获FK异常,并将其包装到服务层的ReferencedObjectsException中,并显示相应的错

当用户将删除一个实体,但由于存在对该实体的引用而无法删除该实体时,是否有一种通用解决方案来检查引用?
我在寻找一种在所有情况下都有效的解决方案。如果用户尝试删除,我可以签入我的DataAccess层,并向用户提供一条无法删除的消息实体,因为存在引用。如何解决此问题?

您需要映射相关实体,并包括cascade='all-delete-orphan'选项。

如果您不需要知道引用是什么,您可以在DAL中捕获FK异常,并将其包装到服务层的ReferencedObjectsException中,并显示相应的错误消息

否则,您必须按代码查看映射,按代码确定引用,并按代码检查依赖关系


安全性在这里有一个映射重写部分:,从NHibernate配置对象,您可以访问类映射。

这并不总是一个好主意。假设你有带标签的问题。用户错误地删除了标记,您的问题就消失了。如果问题标记联接表上有多对多联接实体,则应在删除问题或标记时删除该实体,但映射不应指示删除问题标记时应删除标记或问题。确定,假设每个问题只能有一个标记。当标签被删除时,如果你级联删除,所有相关的问题也会被删除。我不知道你为什么要在这种情况下设置外键关系,但是是的,这是一个你不想做“全部删除孤立”的区域。相反,您希望使用not found='ignore'来映射问题的Tag属性。不,我只是说,有时候,当您删除一个实体时,您不应该级联删除,因为它可能会擦除数据库的一半:这里有一个示例,我如何查看映射并通过代码确定引用?更新了我的答案。你应该能够从给定的链接中解决一些问题。