У меня есть класс «Фото» и класс «Комментарий».Фотография может иметь несколько комментариев.
Я настроил это как отношение «один ко многим» в моем файле отображения HBM и установил cascade = «all-delete-orphan» вместо «Комментарии».'bag внутри файла сопоставления Photo.hbm.xml.
Однако, если я пытаюсь удалить фотографию, с которой связано 1 или более комментариев, я получаю сообщение "DELETE, конфликтующее с ограничением REFERENCE"FK_Comments_Photos "'
Я пробовал несколько других каскадных опций для мешка комментариев в моем Photo.hbm.xml, но независимо от того, что я установил, я получаю один и тот же результат каждый раз.Я просто хочу иметь возможность удалить фотографию и автоматически удалить любые связанные с ней комментарии.
Вот мое отображение фотографий (отредактировано для краткости):
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" .... default-access="property" default-cascade="none" default-lazy="true">
<class xmlns="urn:nhibernate-mapping-2.2" name="Photo" table="Photos">
<id name="PhotoId" unsaved-value="0">
<column name="PhotoId" />
<generator class="native" />
</id>
...
<bag name="Comments" table="Comments" cascade="all-delete-orphan" order-by="DateTimePosted desc" where="Approved=1">
<key column="PhotoId" />
<one-to-many class="Comment" />
</bag>
</class>
Вот мое отображение комментариев (отредактировано для краткости):
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" ... default-access="property" default-cascade="none" default-lazy="true">
<class xmlns="urn:nhibernate-mapping-2.2" name="Comment" table="Comments">
<id name="CommentId" unsaved-value="0">
<column name="CommentId"></column>
<generator class="native" />
</id>
...
<property name="Author" not-null="true" />
<property name="Body" not-null="true" />
<property name="Approved" not-null="true" />
<many-to-one name="Photo" not-null="true">
<column name="PhotoId" />
</many-to-one>
</class>
Есть ли у кого-нибудь какие-либо предложения относительно того, почему не происходит каскад, когда я пытаюсь удалить фотографию с комментариями?с этим?
ОБНОВЛЕНИЕ: Единственный способ, которым я могу получить каскад, - это настроить «Правило удаления» в SQL Server для этого отношения на «Каскад», и при этомозначает, что мне не нужно указывать какие-либо каскадные действия в моем NHibernate Mapping.Тем не менее, это не идеально для меня - я хотел бы иметь возможность настроить каскадное поведение в NHibernate Mapping идеально, поэтому я все еще не понимаю, почему он не обращает никакого внимания на мой NHibernateнастройка каскада?