如何在 NHibernate 中从多个表中获取和保存单个联接值
本文关键字:保存 获取 单个联 NHibernate | 更新日期: 2023-09-27 17:55:59
至于我们在做什么,我不能太具体,但这里是:
我们的销售代表是我们的客户,他们每个代表只能与一家公司合作,但每个公司都有自己的方法来识别他们的代表,但是所有代表都存储在我们的Rep
表中。
我们Rep
表中的PK是RepID
,但是由于他们各自的公司分配给他们的ID,我们还有一个varchar RepNumber
。
输入表/实体RepAddress
。该表有一个FK可以通过RepID
Rep
,但是由于遗留系统,类RepAddress
必须具有RepNumber
。
我试图完成的是能够通过设置RepNumber
并让 NHibernate 根据RepNumber
从Rep
表中获取/更新RepAddress
表中的RepID
来保存/更新RepAddress
。
这是我在 RepAddress 映射上的失败尝试:
<class name="RepAddress">
<id name="AddressID">
<generator class="native" />
</id>
<property name="AddressType" column="AddressTypeID" />
<property name="AttentionLine" />
<property name="CareOfLine" />
<property name="AddressLine1" />
<property name="AddressLine2" />
<property name="AddressLine3" />
<property name="City" />
<property name="ZipCode" />
<property name="State" column="StateTypeID" />
<property name="Province" column="ProvinceTypeID" />
<property name="Country" column="CountryTypeID" />
<property name="LastModifiedDate" />
<property name="SessionActivityID" />
<join table="Rep">
<key column="RepID"/>
<property name="RepNumber" />
</join>
</class>
感谢您提前提供任何帮助!如果您需要更多信息,请告诉我。
您的RepAddress
类应该具有对Rep
实例的引用(在文档中查找many-to-one
)
由于RepNumber
不是 PK,因此需要查询才能获取Rep
实例。然后你只需分配它。
如果您有 RepID
,您将能够执行以下操作,这不需要数据库往返:
repAddress.Rep = session.Load<Rep>(repId);
NHibernate Cascades:
实体与其他对象具有关联,这可以是与单个项的关联(多对一)或与集合的关联(一对多、多对任意)。无论如何,您都可以告诉 NHibernate 自动遍历实体的关联,并根据级联选项进行操作。例如,使用保存更新级联将未保存的实体添加到集合中将导致它与其父对象一起保存,而无需我们这边的任何明确说明。
说:这是纯粹的商业逻辑。不要试图让NH为你做这件事。
通常,当您在 UI 中的数据 (DTO) 和数据库中的实体之间做出区分时,它会容易得多。这允许具有在将数据存储到数据库之前解释 UI 中的数据的逻辑。当您在 UI 中拥有实体时,您很快就会迷路。