我在一个系统中有一个场景,我试图尽可能地简化它。我们有一个(让我们称之为)人工制品表,人工制品可以被任意数量的安全角色访问,安全角色可以访问任意数量的人工制品。因此,我们在数据库中有 3 个表 - 一个描述人工制品,一张描述角色,以及一个将人工制品 ID 链接到角色 ID 的多对多关联表。
在领域方面,我们有两个类——一个用于角色,一个用于人工制品。artefact 类有一个 IList 属性,它返回可以访问它的角色列表。(但是,角色不提供获取可以访问的人工制品的属性)。
因此,人工制品的休眠映射包含以下内容;
<bag name="AccessRoles" table="ArtefactAccess" order-by="RoleID"
lazy="true" access="field.camelcase-underscore" optimistic-lock="false">
<key column="ArtefactID"/>
<many-to-many class="Role" column="RoleID"/>
</bag>
这一切都很好,如果我删除了一个人工制品,关联表将被适当地清理,并且删除的人工制品和角色之间的所有引用都被删除(尽管角色没有被正确删除——因为我们不希望删除孤儿)。
问题是 - 如何删除一个角色并让它自动清除关联表。如果我目前尝试删除一个角色,我会得到一个引用约束,因为该角色的关联表中仍有条目。成功删除角色的唯一方法是查询链接到该角色的所有人工制品,从人工制品的角色集合中删除该角色,更新人工制品,然后删除该角色 - 不是很有效或很好,尤其是在联合国 -简化的系统,角色可以与任意数量的其他表/对象相关联。
我需要能够向 NHibernate 提示我希望在删除角色时清除此关联表 - 这可能吗,如果可以的话 - 我该怎么做?
谢谢你的帮助。