NHibernate Многие ко многим удаляют все мои данные в таблице - PullRequest
0 голосов
/ 05 января 2010

Я хотел бы поблагодарить @Stefan Steinegger и @David, которые помогли мне вчера с картированием «многие ко многим».

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

Если я удаляю одну из записей новостей, следующие сопоставления удаляют все мои записи новостей, имеющие одинаковые теги. Одна вещь, которую я должен заметить, я разрешил только уникальный тег, сохраненный в теге " Таблица.

Это отображение имеет смысл для меня, оно удалит тег и связанные с ним записи новостей, но как я могу реализовать систему тегов с помощью NHibernate?

Кто-нибудь может дать мне какое-нибудь предложение? Большое спасибо.

Daoming.

Отображение новостей:

<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>

Отображение тегов:

<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>

Ответы [ 3 ]

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

Насколько я знаю, сопоставление правильное (я использую файлы сопоставления, которые выглядят точно так же). Проблема заключается в атрибуте cascade: опция «all» заставляет NHibernate распространять каждое действие на объекте на экземпляры коллекции. В вашем случае, когда вы удаляете новость, удаляются также все связанные теги.

Вы, вероятно, должны использовать «none» (в этом случае вы в конечном итоге получите неиспользуемые теги в базе данных) или «delete-orphans» (на стороне новостного элемента - используйте «none» на стороне тега) .

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

Используйте каскадную опцию «сохранить-обновить».

Опция «все» будет каскадно удалять, что вам не нужно в этом случае. Но вы, опция «none», потребует, чтобы сущность Tag уже сохранялась, что, я думаю, не всегда так.

Таким образом, установив каскад «сохранять-обновлять» новые теги, пока они не будут вставлены в таблицу тегов и в таблицу ссылок News_Tags, но при удалении тега из объекта «Новости» он будет удален только из таблицы ссылок таблица тегов.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...