如何从NHibernate中的多个表中获取和保存单个连接值?

时间:2013-01-24 20:32:50

标签: c# .net nhibernate nhibernate-mapping

就我们正在做的事情而言,我不能过于具体,但这里有:

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

我们的Rep表中的PK为RepID,但由于各自公司为其分配了ID,我们还有一个varchar RepNumber

输入表格/实体RepAddress通过RepRepID之间的FK为RepAddress,但由于遗留系统, RepNumber必须{{1} }}

我想要完成的是通过设置RepAddress并让NHibernate获取/更新 {中的RepNumber来保存/更新RepID基于RepAddress的{​​{1}}表中的{1}} 表。

这是我在RepAddress映射中失败的尝试:

Rep

感谢先进的任何帮助!如果您需要更多信息,请与我们联系。

3 个答案:

答案 0 :(得分:0)

您的RepAddress班级应该引用Rep个实例(在文档中查找many-to-one

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

如果您拥有RepID,则可以执行以下操作,这不需要数据库往返:

repAddress.Rep = session.Load<Rep>(repId);

答案 1 :(得分:0)

NHibernate Cascades:

实体与其他对象有关联,这可能是与单个项目(多对一)的关联或与集合的关联(一对多,多对多)。 无论如何,您可以告诉NHibernate自动遍历实体的关联,并根据级联选项执行操作。例如,将未保存的实体添加到具有保存更新级联的集合将导致它与其父对象一起保存,而不需要我们这方面的明确指示。

答案 2 :(得分:0)

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

通常,当您在UI(DTO)中的数据与数据库中的实体之间产生差异时,要容易得多。这允许具有在将UI存储到数据库之前解释来自UI的数据的逻辑。当您在UI中拥有实体时,您很快就会迷失方向。