我有两节课。一个称为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孤儿之外,没有其他方法了。