我有两节课。一个称为Employee,另一个称为EmployeeDetails,与其父'Employee'类有零或一个关系。换句话说,在某些情况下,我们需要将额外的数据存储到这个'EmployeeDetails'类中,但这不一定是规范。db结构非常简单,“employeedetails”与其父级共享同一id。
我遇到的问题是从'EmployeeDetails'类中删除'Employee'类,我本以为将对象设置为空会完成技巧和刷新会话,但数据库中的记录不会被删除。
我的映射是…

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
    <class name="StudioBusinessLayer.Data.Structure.Employee, StudioBusinessLayer" table="tblEmployee" lazy="false">
        <id name="ID" column="ID" type="int">
            <generator class="native" />
        </id>

        <property name="Name" column="Name" not-null="true" type="string" length="100" />
        <!-- etc -->

        <one-to-one constrained="false" name="EmployeeDetails" class="StudioBusinessLayer.Data.Structure.EmployeeDetails, StudioBusinessLayer" cascade="all-delete-orphan"  />

    </class>
</hibernate-mapping>

……对于employeedetails类……
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
    <class name="StudioBusinessLayer.Data.Structure.EmployeeDetails, StudioBusinessLayer" table="tblDetails" lazy="false">
        <id name="ID" column="DetailsID" type="int">
            <generator class="foreign">
                <param name="property">Employee</param>
            </generator>
        </id>

        <property name="Address" column="Address" not-null="false" type="string" length="1000" />
        <property name="ContactEmail" column="ContactEmail" not-null="false" type="string" length="255" />
        <property name="ContactName" column="ContactName" not-null="false" type="string" length="255" />
        <property name="ContactTelephone" column="ContactTelephone" not-null="false" type="string" length="255" />
        <property name="ZipCode" column="ZipCode" not-null="true" type="string" length="100" />

        <many-to-one name="Employee" class="StudioBusinessLayer.Data.Structure.Employee, StudioBusinessLayer" column="DetailsID" insert="false" update="false"></many-to-one>

    </class>
</hibernate-mapping>

插入和更新工作得很好,但我一直在努力寻找开关,使删除工作。
如有任何帮助或建议,我们将不胜感激…

最佳答案

不幸的是,nhibernate中的一对一关系还不支持所有delete孤儿。有关详细信息,请参见此issue或此question。似乎除了自己删除employeedetails或使用一个事件侦听器来模拟一对一的所有delete孤儿之外,没有其他方法了。

09-11 20:14