Dav*_*her 13 nhibernate many-to-many cascade nhibernate-cascade
我想删除具有许多用户组的用户,但这些用户组不属于该用户:其他用户也可以使用此用户组.即使没有用户引用用户组,也可以存在用户组.
我想映射多对多关系,这样如果用户被删除,关系会自动删除但不是用户组?
我试过,Cascade.All因为我认为多对多的级联会影响关系但不会影响另一方.我以为只会Cascade.AllDeleteOrphan删除其他人.显然我错了.
似乎我不理解级联规则.有人可以向我提供明确的解释,也许也可以达到我的目标吗?
谢谢
Rad*_*ler 12
NHibernate many-to-many关系确实提供了我们所期望的,让我更详细地解释它.虽然我们只需要两个实体的用户和组,我们将需要三个表:User,Group,UserGroup(与列用户ID,的GroupId)
C#实体:
public class User {
IList<Group> Groups {get;set;}
}
public class Group{
IList<User> Users{get;set;}
}
Run Code Online (Sandbox Code Playgroud)
hbm.xml我们的映射将如下所示:
<class name="User" ...
<bag name="Groups" lazy="true"
table="UserGroup" cascade="none" >
<key column="UserId" />
<many-to-many class="Group" column="GroupId" />
</bag>
...
<!-- and group vica versa -->
<class name="Group" ...
<bag name="Users" lazy="true"
table="UserGroup" cascade="none" >
<key column="GroupId" />
<many-to-many class="User" column="UserId" />
</bag>
...
Run Code Online (Sandbox Code Playgroud)
具有重要设置的此映射cascade="none"将执行预期的行为.此映射表示存在PairTable UserGroup,它没有任何实体表示.因此,不能有任何级联设置影响此表.此表用于hiddenly幕后.
配对表
当一些用户被删除时,NHibernate将删除UserGroup表中的所有关系(实际上这将是批处理中的第一个语句).这只是关系引用约束处理.我们不能UserId在表中留下任何内容,表UserGroups中没有外键User.
另一个关系结束
最后是级联设置:因为在UserGroup没有任何注意的情况下管理表,所以在这种情况下级联应用于实体Group- 另一个关系结束.因此将其设置为all-delete-orphan可能会导致完全删除所有交叉引用的记录.
总结:级联bag与many-to-many关系是为另一端点,不配对表.
| 归档时间: |
|
| 查看次数: |
3952 次 |
| 最近记录: |