2012-06-25 62 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

收集表是任何值的集合和任何 科尔映射为多对多的其他实体的引用 关联