2012-06-25 99 views
0

我知道它已被詢問了很多次,我也在這個網站上發現了很多答案,但我只是不能弄出來這個問題。Nhibernate不能刪除子對象

任何人都可以幫我用這段代碼?

非常感謝。

這裏是我的父映射文件

<set name="ProductPictureList" table="[ProductPicture]" lazy="true" order-by="DateCreated" inverse="true" cascade="all-delete-orphan" > 
    <key column="ProductID"/> 
    <one-to-many class="ProductPicture"/> 
</set> 

這裏是我的孩子映射文件

<class name="ProductPicture" table="[ProductPicture]" lazy="true"> 
<id name="ProductPictureID"> 
    <generator class="identity" /> 
</id> 
<property name="ProductID" type="Int32"></property> 
<property name="PictureName" type="String"></property> 
<property name="DateCreated" type="DateTime"></property> 
</class> 

這裏是我的C#代碼

 var item = _productRepository.Get(productID); 

     var productPictrue = item.ProductPictureList 
      .OfType<ProductPicture>() 
      .Where(x => x.ProductPictureID == productPictureID); 

     // reomve the finding item 
     var ok = item.ProductPictureList.Remove(productPictrue); 

     _productRepository.SaveOrUpdate(item); 

確定是假的價值,這孩子對象仍然在我的數據庫中。

+0

「_productRepository.SaveOrUpdate」的代碼在哪裏? –

回答

0

不是100%肯定,但可能是因爲您已將ProductID定義爲ProductPicture的屬性,我假定這是來自Product類的PK。你不需要再添加它,它會由關係創建。

+0

感謝您的幫助,你的意思是我可以從我的映射,類和數據庫中刪除產品ID,這種關係將仍然存在? –

+0

我的意思是將其從映射文件中移除ProductPicture –

0

我不確定您在集合標記中使用的table="[ProductPicture]"是否正確。

一對多標籤已經建立了ProductPictureList和ProductPicture之間的鏈接。 我認爲表格屬性通常用於建模多對多關係時使用單獨的關係表。

從nhibernate.info Doc

表(可選 - 默認爲屬性的名稱)的 集合表的名稱(而不是用於一個一對多關聯)

And

收集表是任何值的集合和任何 科爾映射爲多對多的其他實體的引用 關聯