我有一個'照片'類和'評論'類。照片可以有多個評論分配給它。NHibernate一對多刪除不級聯
我在我的HBM映射文件中配置爲一對多關係,並且在Photo.hbm.xml映射文件中針對'評論'包設置cascade =「all-delete-orphan」。
但是,如果我嘗試刪除其中有1個或多個與其關聯註釋的照片,我得到「DELETE語句衝突與基準約束‘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中配置'刪除規則'與'Cascade'的關係,這樣做意味着我不需要指定我的NHibernate映射中的任何級聯動作。然而,這對我來說並不理想 - 我希望能夠在NHibernate映射中理想地配置級聯行爲,所以我仍然困惑,爲什麼它似乎沒有注意到我的NHibernate級聯設置?
感謝您的建議。我只是試過這個,但仍然是相同的問題/錯誤消息。如果我刪除SQL Server中現有的關係/約束,那麼照片記錄的刪除不會發生任何錯誤,但會將我孤立的相關注釋記錄留在數據庫中。這就像只注意SQL Server中的事物配置,並忽略SQL Server之外的任何級聯設置。 – marcusstarnes 2011-01-21 12:49:01