Nhibernate 在包上休眠级联删除

Nhibernate 在包上休眠级联删除,nhibernate,orm,Nhibernate,Orm,在使用NHibernate构建了我的大部分DAL之后,我现在发现在我的HBM文件中也需要考虑SQL Server的级联删除规则。我的所有收藏都使用了包,但似乎没有办法向包添加cascade=“delete”属性。我可以将我所有的包更改为集合,但这似乎意味着我已经将模型上的所有IList更改为PersistentGenericSets,而我并不真正喜欢这样做 有什么建议吗 Anthony有两个独立但相关的概念:NHibernate的级联规则和DB级联 后者实际上是在键元素上配置的,因此,如果FK在

在使用NHibernate构建了我的大部分DAL之后,我现在发现在我的HBM文件中也需要考虑SQL Server的级联删除规则。我的所有收藏都使用了包,但似乎没有办法向包添加cascade=“delete”属性。我可以将我所有的包更改为集合,但这似乎意味着我已经将模型上的所有IList更改为PersistentGenericSets,而我并不真正喜欢这样做

有什么建议吗


Anthony有两个独立但相关的概念:NHibernate的级联规则和DB级联

后者实际上是在
元素上配置的,因此,如果FK在删除级联上具有
,则行李应该是这样的:

<bag name="Children" ...>
  <key column="ParentId" on-delete="cascade"/>
  <one-to-many class="Child"/>
</bag>

您可以向行李映射添加级联属性。列出了属性
cascade=“all | none | save update | delete | all delete orphan”的几个选项
。一对多关系最常用的选项是
all delete orphan
。将“级联”设置为该值将导致所有数据库操作级联到集合,并且如果从集合中删除子对象(孤立),则将删除这些子对象


数据库级联类似,但不提供自动删除孤立子记录的功能。在NHibernate和数据库中设置cascade选项有些冗余,但如果有其他系统直接访问数据库,则可能会很有用

这是正确的,但我想指出,从NHibernate创建数据库脚本时使用on delete设置。它将创建一个带有on delete级联的外键。它不会级联删除您的对象。实际上,它修改了NHibernate的行为,因为它现在知道存在on delete级联行为,因此,如果您有
cascade=“all”
,它将依赖数据库来完成,而不是逐个删除子对象。只是尝试了一下,我得到了以下错误:delete=“cascade”上只能使用反向一对多关联是的,您需要使关联双向(子对象必须有对父对象的引用)并将
reverse=“true”
放入包中。