删除父对象时,如何使NHibernate删除子引用?
我有一个NewsFeed对象映射如下:删除父对象时,如何使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" />
<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"