C# nHibernate,一对零或一对一的关系问题
我有两节课。一个名为C# nHibernate,一对零或一对一的关系问题,c#,nhibernate,nhibernate-mapping,C#,Nhibernate,Nhibernate Mapping,我有两节课。一个名为Employee,另一个名为EmployeeDetails,它与其父“Employee”类的关系为零或一。换句话说,在某些情况下,我们需要将额外的数据存储到这个“EmployeeDetails”类中,但这并不一定是标准。db结构非常简单,“EmployeeDetails”与其父项共享相同的ID 我遇到的问题是从'Employee'类中删除'EmployeeDetails'类,我会想象将对象设置为null会完成技巧和刷新会话,但数据库中的记录不会被删除 我的映射是 <?x
Employee
,另一个名为EmployeeDetails
,它与其父“Employee”
类的关系为零或一。换句话说,在某些情况下,我们需要将额外的数据存储到这个“EmployeeDetails”
类中,但这并不一定是标准。db结构非常简单,“EmployeeDetails”与其父项共享相同的ID
我遇到的问题是从'Employee'
类中删除'EmployeeDetails'
类,我会想象将对象设置为null会完成技巧和刷新会话,但数据库中的记录不会被删除
我的映射是
<?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>
雇员
插入和更新可以很好地工作,但我一直在努力寻找使其能够用于删除的开关
感谢您的帮助或建议……EmployeeDetails映射看起来不正确。似乎到Employee的多对一映射也应该是一对一的,但我看不到TBLDeails中有Employee.Id值的列。没有它,您就无法为NHibernate中的删除逻辑建立双向关联,以了解哪个tblDetails行属于哪个员工 更新:
我找到了一个关于如何映射一对一关系的方法,但它适用于严格的一对一场景。它确实提到需要检查子表以确定关联是否存在,因此它可能适用于此处,但可能需要在代码中进行一些手动检查。不幸的是,NHibernate中的一对一关系还不支持所有删除孤立项。有关更多详细信息,请参见此项或此项。似乎除了自己删除EmployeeDetails或者使用一个事件监听器来模拟一对一的所有delete orphan之外,没有其他方法了。不用担心,谢天谢地,这件事可以由业务层处理,所以尽管nHibernate的实现不是很好,但至少它已经封装好了。干杯