「写真」クラスと「コメント」クラスがあります。写真には複数のコメントを割り当てることができます。
これをHBMマッピングファイル内で1対多の関係として構成し、Photo.hbm.xmlマッピングファイル内の「コメント」バッグに対してcascade="all-delete-orphan"を設定しました。
ただし、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内でカスケードアクションを指定する必要がなくなります。マッピング。ただし、これは私にとって理想的ではありません-NHibernateマッピング内でカスケード動作を理想的に構成できるようにしたいので、NHibernateに注意を払っていないように見える理由についてはまだ混乱していますカスケード設定?