2010-01-05 50 views
2

我在学习NHibernate,并希望你们能够帮助我了解标签云设计和解决方案。如何使用NHibernate创建标签系统(多对多)

我有3个表是“新闻”,“标签”和“News_Tags”与多对多的关系,“News_Tags”是链接表。

选项:

  1. 级联=“全”,级联=“全删除,孤儿”如果我删除的消息记录之一,它会删除这些都是我的所有消息记录相同的标签。

  2. 级联=“保存更新”它与储存和更新,但如果我尝试删除新闻它会给出错误:已删除的对象将通过级联(移除协会删除的对象)重新保存

这里是我的映射:

标签:

<class name="Tag" table="Tags" lazy="false"> 
    <id name="TagID"> 
    <generator class="identity" /> 
    </id> 
    <property name="TagName" type="String"></property> 
    <property name="DateCreated" type="DateTime"></property> 

    <!--inverse="true" has been defined in the "News mapping"--> 
    <set name="NewsList" table="New_Tags" lazy="false" cascade="all"> 
    <key column="TagID" /> 
    <many-to-many class="New" column="NewID" /> 
    </set> 
</class> 

新闻:

<class name="New" table="News" lazy="false"> 
<id name="NewID"> 
    <generator class="identity" /> 
</id> 
<property name="Title" type="String"></property> 
<property name="Description" type="String"></property> 

<set name="TagsList" table="New_Tags" lazy="false" inverse="true" cascade="all"> 
    <key column="NewID" /> 
    <many-to-many class="Tag" column="TagID" /> 
</set> 
</class> 

任何人都可以提供一些解决方案吗? @Lck提到我可以手动执行此操作,任何人都可以为我提供一些代码示例吗?非常感谢你。

回答

0

看一看这个答案我给前一阵子:

What is the correct way to define many-to-many relationships in NHibernate to allow deletes but avoiding duplicate records

它并不直接,但通过其极端的解决方案,它让你可以理解需要做什么评论回答您的quesiton实现你所需要的。

+0

我已经花了3晚在这个,几乎放弃。我把inverse =“true”放入错误的映射文件中。非常感谢。你写了任何博客或文章,所以我可以关注他们。 :) – 2010-01-07 11:41:45

+0

不客气。我目前没有博客,但我正在处理它;-) – tolism7 2010-01-07 12:25:19

0

随着cascade="all",删除一个新闻对象应该简单地删除在New_Tags表中的所有相应的行,不应该吗?我不认为它会删除所有以这种方式标记的新闻项目。这不是你想要的行为吗?