Как создать систему тегов с NHibernate (многие ко многим) - PullRequest
2 голосов
/ 05 января 2010

Я изучаю NHibernate и надеюсь, что вы, ребята, сможете немного помочь мне с дизайном и решениями Tag Cloud.

У меня есть 3 таблицы: «Новости», «Теги» и «News_Tags» с отношением «многие ко многим», а «News_Tags» - это таблица ссылок.

Параметры:

  1. cascade = "all", cascade = "all-delete-orphan" Если я удаляю одну из записей новостей, она удалит все мои записи новостей, имеющие одинаковые теги.

  2. cascade = "save-update" Работает с сохранением и обновлением, но если я попытаюсь удалить новости, это выдаст ошибку: удаленный объект будет повторно сохранен каскадом (удалить удаленный объект из ассоциаций)

Вот мои отображения:

Теги:

<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 упомянул, что я мог бы сделать это вручную, кто-нибудь может предоставить мне пример кода? Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 05 января 2010

Посмотрите на этот ответ, который я дал недавно:

Как правильно определить отношения «многие ко многим» в NHibernate, чтобы разрешить удаление, но избегать дублирования записей

Он отвечает не на ваш вопрос напрямую, а благодаря его экстремальному решению и полученным комментариям, вы можете понять, что нужно сделать, чтобы достичь именно того, что вам нужно.

0 голосов
/ 05 января 2010

При cascade="all" удаление объекта News должно просто удалить все соответствующие строки в таблице New_Tags, не так ли? Я не думаю, что это удалит все новости, которые помечены таким образом. Разве это не то поведение, которое вы хотите?

...