删除父对象时,如何使NHibernate删除子引用?

删除父对象时,如何使NHibernate删除子引用?,nhibernate,Nhibernate,我有一个NewsFeed对象映射如下: <class name="NewsFeed"> <id name="NewsFeedId"> <generator class="guid"/> </id> <property name="FeedName" not-null="true" /> <property name="FeedURL" not-null="true" />

我有一个NewsFeed对象映射如下:

<class name="NewsFeed">
    <id name="NewsFeedId">
        <generator class="guid"/>
    </id>

    <property name="FeedName" not-null="true" />
    <property name="FeedURL" not-null="true" />
    <property name="FeedIsPublished" not-null="true" />
</class>

用户可以选择一组他们可能感兴趣的提要,映射如下:

<class name="SystemUser">
    <id name="SystemUserId">
        <generator class="guid"/>
    </id>


    <set name="SelectedNewsFeeds" table="SystemUserSelectedNewsFeeds" cascade="all">
        <key column="SystemUserId" />
        <many-to-many column="NewsFeedId" class="NewsFeeds.NewsFeed, Domain"/>
    </set>

</class>

我希望发生的是,当我删除父新闻源时,所有选定的新闻源引用也会被删除,而不必加载每个系统用户并手动删除新闻源

实现这一目标的最佳方式是什么

更新:在删除新闻源时,使用cascade=“all delete orphan”而不是“all”仍然会导致异常:

DELETE语句与引用约束“FKC8B9DF81601F04F4”冲突。冲突发生在数据库“System”、表“dbo.SystemUserSelectedNewsFeeds”、列“NewsFeedId”中

改变


由于集合中的关系是多对多的,nHibernate无法区分关系的哪一端是子关系,哪一端是父关系,而我想要实现的最快方法就是编写一些通过存储库发送的SQL,从集合中删除相应的新闻提要,然后删除了父新闻提要。下一次收集时,水分的变化得到了反映

另一个选择是打破中间的一个连接类的多对多关系,NHiBeBATE将能够确定父子关系,并且级联应该工作。p> JMCD

你的第二种方法:

另一种选择是打破僵局 与联接的多对多关系 阶级在中间 将能够确定 亲子关系与家庭关系 级联应该起作用

实际上是nHibernate的人在他们的文档中推荐的

不要使用外来关联映射。

真正多对多的好用例 联系很少。大部分 您需要更多信息的时间 存储在“链接表”中。在这个 在这种情况下,最好使用两个 一对多关联到一个 中间链接类。事实上,我们 我想大多数的联想都是 一对多,多对一,你 使用任何其他工具时应小心 联想风格,问问自己 这确实是必要的


使用两个一对多关联增加了灵活性,可以轻松地向“订阅”添加其他属性,例如特定订阅的通知首选项。

Hmm。。我使用的是NHibernate2.2,发生了这样的情况:[MappingException:不支持的级联样式:删除孤立项]啊。。应该是cascade=“all delete orphan”不幸的是没有骰子:delete语句与引用约束“FKC8B9DF81601F04F4”冲突。冲突发生在数据库“System”、表“dbo.SystemUserSelectedNewsFeeds”、列“NewsFeedId”中。
cascade="all"
cascade="all-delete-orphan"