【发布时间】:2011-08-10 11:55:20
【问题描述】:
当用户删除一个实体并且由于存在对它的引用而无法删除它时,是否有通用的解决方案来检查引用? 我搜索适用于所有情况的解决方案。用户尝试删除,我可以签入我的 DataAccess-Layer 并给用户一条消息“实体无法删除,因为有引用”。你如何解决这个问题?
【问题讨论】:
标签: c# nhibernate reference
当用户删除一个实体并且由于存在对它的引用而无法删除它时,是否有通用的解决方案来检查引用? 我搜索适用于所有情况的解决方案。用户尝试删除,我可以签入我的 DataAccess-Layer 并给用户一条消息“实体无法删除,因为有引用”。你如何解决这个问题?
【问题讨论】:
标签: c# nhibernate reference
如果您不需要知道引用是什么,您可以在 DAL 中捕获 FK 异常,并将其包装到您的服务层到 ReferencedObjectsException 中,并带有适当的错误消息。
否则,您将不得不查看映射(按代码)、确定引用(按代码)并检查依赖关系(按代码)。
Rhino.Security 在这里有一个映射重写部分:https://github.com/ayende/rhino-security/blob/master/Rhino.Security/Impl/MappingRewriting/UserMapper.cs,从 NHibernate 配置对象,您可以访问类映射。
【讨论】:
您需要映射相关实体并包含cascade='all-delete-orphan' 选项。
【讨论】:
Question-Tag 连接表上有一个多对多连接实体,则应删除该实体并删除Question 或Tag,但映射不应指示当Question-Tag 被删除时,Tag 或Question 应该被删除。
'all-delete-orphan' 的领域。相反,您希望将问题的 Tag 属性的 <many-to-one> 映射为 not-found='ignore'。