0

至于我们在做什么,我不能说得太具体,但这里有:

我们的代表是我们的客户,他们每个人只能与一家公司合作,但每个公司都有自己识别代表的方式,但是所有代表都存储在我们的Rep表中。

Rep我们表中的 PK是RepID,但是由于他们各自的公司分配给他们的 ID,我们也有一个 varchar RepNumber

输入表/实体RepAddress。该有一个 FK 到Repvia RepID,但是由于遗留系统,该类 RepAddress必须具有RepNumber

我想要完成的是能够RepAddress通过设置RepNumber并让NHibernateRepID从基于.RepAddressRepRepNumber

这是我对 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>

感谢您在高级方面的任何帮助!如果您需要更多信息,请告诉我。

4

3 回答 3

0

你的RepAddress类应该有一个实例的引用(在文档中Rep查找)many-to-one

由于RepNumber不是 PK,因此您需要查询来获取Rep实例。然后你只需分配它。

如果您有RepID,您将能够执行以下操作,这不需要数据库往返:

repAddress.Rep = session.Load<Rep>(repId);
于 2013-01-24T23:36:34.170 回答
0

NHibernate 级联:

实体与其他对象有关联,这可能是与单个项目的关联(多对一)或与集合的关联(一对多,多对任意)。无论如何,您可以告诉 NHibernate 自动遍历实体的关联,并根据级联选项进行操作。例如,使用 save-update 级联将未保存的实体添加到集合中将导致它与其父对象一起保存,而无需我们方面的任何明确说明。

于 2013-01-25T06:40:01.247 回答
0

我会说:这是纯粹的业务逻辑。不要试图让NH为你做这件事。

通常,当您在 UI (DTO) 中的数据和数据库中的实体之间做出区别时会容易得多。这允许在将数据存储到数据库之前解释来自 UI 的数据的逻辑。当您在 UI 中有实体时,您很快就会迷失方向。

于 2013-01-25T07:08:15.240 回答