我在一个系统中有一个场景,我尽可能地尽量简化.我们有一个(让我们称之为)人工制品的表格,可以通过任意数量的安全角色访问人工制品,安全角色可以访问任意数量的人工制品.因此,我们在数据库中有3个表 - 一个描述人工制品,一个描述角色,一个多对多关联表将人工制品ID与角色ID相关联.
在领域方面,我们有两个类 - 一个用于角色,一个用于人工制品.artefact类具有IList属性,该属性返回可以访问它的角色列表.(但是角色不提供获取可以访问的人工制品的属性).
因此,人工制品的nhibernate映射包含以下内容:
这一切都运行良好,如果我删除一个人工制品,关联表将被适当地清理,删除的人工制品和角色之间的所有引用都将被删除(虽然正确地删除了角色 - 因为我们不想删除孤儿).
问题是 - 如何删除角色并让它自动清除关联表.如果我目前尝试删除一个角色,我会得到一个引用约束,因为该角色的关联表中仍有条目.成功删除角色的唯一方法是查询链接到该角色的所有人工制品,从人工制品的角色集合中删除角色,更新人工制品然后删除角色 - 效率不高或不好,特别是在非简化的系统,角色可以与任何数量的其他表/对象相关联.
我需要能够向NHibernate提示我希望每当我删除一个角色时都要清除这个关联表 - 这是可能的,如果可以的话 - 我该怎么做?
谢谢你的帮助.
由于我正在寻找这个答案并在谷歌上找到这个帖子(没有回答)我想我会发布我的解决方案.有三个表:Role,RolesToAccess(ManyToMany),Access.
创建以下映射:访问:
角色:
如上所述,您可以使RolesToAccess属性受到保护,这样它们就不会污染您的模型.