2012-10-31 64 views
0

我在兩個表格 - 患者和研究之間建立了多對一的關係。 當病人被刪除時,我希望他的所有研究也會被刪除。 在的hbm.xml文件相關的線路有:NHibernate將「ON-DELETE」選項設置爲RESTRICT而不是CASCADE

<class name="Study" table="Studies"> 
     <id name="Uid"> 
      <generator class="guid"/> 
     </id> 
     <many-to-one name="Patient" class="Patient" column="PatientId" lazy="false" cascade="all"/> 
</class> 

和:

<class name="Patient" table="Patients"> 
    <id name="Uid"> 
     <generator class="guid"/> 
    </id> 
    <property name="PatientId"/> 
    <property name="Name" /> 
</class> 

我使用NHibernate的3.3.1MySQL服務器。 通過設置cascade=all我期望在MySQL工作臺中看到FK選項On Delete將設置爲CASCADE,但取而代之的是它被設置爲RESTRICT。 當我手動將其更改爲CASCADE(通過工作臺),一切工作正常。 有沒有辦法自動將它設置爲CASCADE?我也嘗試在hbm.xml文件中設置on-delete=cascade,但它不起作用。

有什麼建議嗎?

回答

0

首先,語法自動清除患兒家長時被刪除是...

  • cascade="all-delete-orphan"(如果你想兩者都和孤兒刪除)。 NHibernate將遍歷內存中的子項並將其刪除。

  • on-delete="cascade"的關鍵。數據庫方面會發生兒童刪除。

但是,在你的情況下,你試圖在many-to-one映射上做到這一點。我不認爲這是可能的。 AFAIK - 僅適用於one-to-many映射。

爲了解決這個問題

  • 您可以手動添加腳本來添加刪除的級聯分貝的水平(你已經完成)

  • 變化之間的關係是雙向的
+0

感謝您的回答。我無法更改關係,因爲實體位於不同的程序集中。研究知道患者實體,但反之亦然。有沒有另外一種方法可以解決它,而無需添加手動腳本? – user1788063

+0

關於「不同的裝配體問題」...將你的研究(例如IStudy)的抽象放到一個你的類型都知道的裝配體中(或者在與Patient相同的裝配體中),並在你的領域模型中使用它。 – Roger

相關問題