Nhibernate 还有一个关于;删除的对象将通过级联(从关联中删除删除的对象)重新保存;

Nhibernate 还有一个关于;删除的对象将通过级联(从关联中删除删除的对象)重新保存;,nhibernate,Nhibernate,对这个NHibernate错误(在标题中)的大多数引用都是关于子对象在仍然包含在父集合中时被删除的,而父集合只会在以后重新保存这些子对象,从而否定了它们的“删除”(这就是错误的状态,以及从重新保存对象的关联中删除对象的建议) 但在我的例子中,错误发生在删除父记录时(然后通过关联删除“子记录”,因此我不希望删除关联,如错误所示) 如果每次都发生这种情况,这是有道理的,但我只是断断续续地观察这个错误,运行完全相同的代码,但只针对特定的记录。其他相同的记录不会触发该条件,并且会执行删除操作(在我处理一

对这个NHibernate错误(在标题中)的大多数引用都是关于子对象在仍然包含在父集合中时被删除的,而父集合只会在以后重新保存这些子对象,从而否定了它们的“删除”(这就是错误的状态,以及从重新保存对象的关联中删除对象的建议)

但在我的例子中,错误发生在删除父记录时(然后通过关联删除“子记录”,因此我不希望删除关联,如错误所示)

如果每次都发生这种情况,这是有道理的,但我只是断断续续地观察这个错误,运行完全相同的代码,但只针对特定的记录。其他相同的记录不会触发该条件,并且会执行删除操作(在我处理一个
客户
和两个
地址
-es时)

不确定要显示多少和什么代码。这是我的“父”对象映射:

我已经将一个客户到多个地址的关系映射为CustomerAddress“复合元素”的“集合”

错误及其间歇性的原因是什么

其他信息

在进一步检查之后——寻找另一个可能包含对同一“地址”子级的引用的集合,我看到了以下映射:

<class name="Address" table="Address">
        <id name="Id" column="[id]" type="Guid" >
            <generator class="guid" />
        </id>

        <!-- REMOVING THE FOLLOWING <BAG> SEEMS TO BE FIXING MY ISSUE -->
        <bag name="CustomerAddressList" inverse="true" cascade="none" lazy="false" >
            <key>
                <column name="[AddressId]" />
            </key>
            <one-to-many class="CustomerAddress" />
        </bag>

    </class>


删除
为什么CustomerAddress表有两个映射(一个作为复合元素,一个作为实体)?删除Customer address的实体映射,它应该可以工作。

我将猜测:

您有一个双向关联,但尚未指定其中一个是非所有者(通过设置“inverse=true”)

尝试按如下方式修改CustomerAddress关系:

<class name="CustomerAddress" table="CustomerAddress" >
    <id name="Id" column="[Id]" type="Guid">
        <generator class="guid" />
    </id>
    <many-to-one
        name="Address"
        column="[AddressId]"
        class="Address"
        not-null="true"
        cascade="all"/>

    <many-to-one
        name="Customer"
        column="[CustomerId]"
        class="Customer"
        not-null="true"
        cascade="all"
        inverse="true"
         />
        ...
</class>

...

因为我有时单独使用CustomerAddress类—我想我需要独立映射。谢谢你调查这件事。我要试试银行。这听起来似乎有道理。其他的东西似乎已经解决了我的问题-按照你的答案,但不同-请参阅我对原始问题的编辑。
<class name="Address" table="Address">
        <id name="Id" column="[id]" type="Guid" >
            <generator class="guid" />
        </id>

        <!-- REMOVING THE FOLLOWING <BAG> SEEMS TO BE FIXING MY ISSUE -->
        <bag name="CustomerAddressList" inverse="true" cascade="none" lazy="false" >
            <key>
                <column name="[AddressId]" />
            </key>
            <one-to-many class="CustomerAddress" />
        </bag>

    </class>
<class name="CustomerAddress" table="CustomerAddress" >
    <id name="Id" column="[Id]" type="Guid">
        <generator class="guid" />
    </id>
    <many-to-one
        name="Address"
        column="[AddressId]"
        class="Address"
        not-null="true"
        cascade="all"/>

    <many-to-one
        name="Customer"
        column="[CustomerId]"
        class="Customer"
        not-null="true"
        cascade="all"
        inverse="true"
         />
        ...
</class>