C# Nhibernate:一对多,基于多个键?

C# Nhibernate:一对多,基于多个键?,c#,.net,nhibernate,hibernate,nhibernate-mapping,C#,.net,Nhibernate,Hibernate,Nhibernate Mapping,假设我有两张桌子 Table tA ID ID2 SomeColumns Table tB ID ID2 SomeOtherColumns 我希望创建一个对象,我们称之为ObjectA(基于tA),它将与ObjectB(基于tB)具有一对多关系。然而,在我的示例中,我需要使用ID和ID2的组合作为外键。如果我正在编写SQL,它将如下所示: 选择tB* 来自tA,tB 其中tA.ID=tB.ID,tA.ID2=tB.ID2 我知道对于tA中的每个ID/I

假设我有两张桌子

Table tA
    ID
    ID2
    SomeColumns
Table tB
   ID
   ID2
   SomeOtherColumns
我希望创建一个对象,我们称之为ObjectA(基于tA),它将与ObjectB(基于tB)具有一对多关系。然而,在我的示例中,我需要使用ID和ID2的组合作为外键。如果我正在编写SQL,它将如下所示:

选择tB* 来自tA,tB 其中tA.ID=tB.ID,tA.ID2=tB.ID2

我知道对于tA中的每个ID/ID2组合,我应该有很多行 在结核病中,我知道这是一对多的组合。显然,下面的设置对于这种映射是不够的,因为它只考虑了一个键

<set name="A2" table="A2" generic="true" inverse="true" >
  <key column="ID" />
  <one-to-many class="A2" />
</set>


谢谢

我正在寻找完全相同问题的解决方案。似乎一对多关系只能在映射中指定一个列。一定有办法……你试过了吗

<set name="A2" table="A2" generic="true" inverse="true" >
  <key>
    <column ="ID" />
    <column ="ID2" />
  </key>
  <one-to-many class="A2" />
</set>

对我来说,这听起来像是你装错了问题。提出的表结构显然违反了关系数据库的规范化原则。如果表tA中ID/ID2的组合在tB中有许多relate记录,则必须在tA中有代理主键,该主键将从tB引用(因此tB将根本没有ID、ID2列)

正如我前面所说,一旦您的表被规范化,nhibernate映射就和EntityA上的多对一映射或EntityB上的一对多集合映射一样简单(取决于域中这两个实体之间的关系方向)。毕竟,驱动它的是域而不是db结构。

我发布了类似的问题:如果你有想法或者你已经解决了你的帖子,请让我知道你是否对我的有任何想法。。。我真的很感激任何帮助!谢谢