Nhibernate无法删除子对象

时间:2012-06-25 20:13:36

标签: 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);

ok是false值,此子对象仍在我的数据库中。

2 个答案:

答案 0 :(得分:0)

不是100%肯定,但可能是因为您已将ProductID定义为ProductPicture的属性,我认为这是Product类中的PK。您不需要再次添加它,它将由关系创建。

答案 1 :(得分:0)

我不确定您在set标记中使用table="[ProductPicture]"是否正确。

一对多标记已经建立了ProductPictureList和ProductPicture之间的链接。 我认为table属性通常用于在建立多对多关系时使用单独的关系表。

来自nhibernate.info Doc

  

table(可选 - 默认为属性名称)的名称   集合表(不用于一对多关联)

And

  

任何值集合和任何集合都需要集合表   映射为多对多的其他实体的引用集合   协会