2010-01-05 21 views
1

我有我想要映射到会看起来像一个类中的两个表:功能NHibernate - 地图2表一类

CUSTOMER_INFO_CLASS.cs 
---------------------- 
Id (CUSTOMER table) 
CustomerName (CUSTOMER table) 
CustomerTypeDesc (CUSTOMER_TYPE table) 

我试图做它的加入,如下:

Table("CUSTOMER"); 

Id(x => x.ID).Length(10).Column("CustomerId"); 
Map(x => x.CustomerName); 

Join("CUSTOMER_TYPE", m => 
    { 
    m.Optional(); 
    m.Map(x => x.CustomerTypeDesc); 
    m.KeyColumn("CustomerType"); 
    }); 

问题是,我试图链接两个表的字段不是其中任何一个主键。 (默认情况下,通过定义为ID的字段完成的连接) 所以我发现对于CUSTOMER_TYPE表,我可以通过“KeyColumn”定义字段。
如何定义CUSTOMER表中的相关列将是CustomerTypeCode而不是CustomerId? (如果我可以的话)

在结束时,SQL查询应该是这样的:

Select Id, CustomerName, CustomerAddress, CustomerTypeDesc 
From CUSTOMER t1 
    Left join CUSTOMER_TYPE t2 
    On t1.CustomerTypeCode = t2.CustomerType 

回答

0

如果Customer表映射CustomerType成员到CustomerType表的主键,然后休眠应该做的为你自动加入。

是否有一个原因为什么CustomerType没有通过正常的外键引用链接?

+0

CustomerTypeCode不是CUSTOMER的主键,而CustomerType不是CUSTOMER_TYPE的主键,由此我们的问题就开始了。 我不知道为什么CustomerType没有被正常的外键链接,数据库是在一段时间之前建立的。它不是一个选项改变它,因为另一个系统使用它... – Olga 2010-01-06 12:08:03

+0

我注意到的另一件事是,当使用连接,fluint做这样的连接:JOIN领域,定义为从第一个表中的ID =字段,我定义第二张表中的“KeyColumn”。但我不想使用ID列加入,我想从第一个表的其他列,我怎么能告诉它nhibernate ... – Olga 2010-01-06 12:16:02