2010-08-09 52 views
7

我试图从那里非PK在我的主表连接到外部表的PK连接表得到的一个属性。下面是我要完成的任务(我不想引用外国实体)的过于简单例如:功能NHibernate加入不使用主键

表:

CREATE TABLE Status 
(
    Id int, 
    Body text, 
    CategoryId int 
) 

CREATE TABLE Category 
(
    Id int, 
    Name text 
) 

SQL生成:

SELECT Id, Body, CategoryId, Category.Name AS CategoryName 
FROM Status 
LEFT JOIN Category ON Category.Id = Status.CategoryId 

我想在StatusMap中映射这样的连接,但是它似乎是在两个主键(其中Status.Id = Category.Id)加盟:据

Join("Category" m => 
{ 
    m.Optional(); 
    m.KeyColumn("CategoryId"); 
    m.Map(x => x.CategoryName, "Name"); 
}); 
+0

我不能工作了如何可以做到这一点。如果你正在寻找一种解决方法,你可能能够映射到一个视图,这是我通常为这种类型的事情做的。 – cbp 2010-08-10 00:48:19

+0

这就是我目前使用的解决方法,很高兴我不是唯一一个:) – jwarzech 2010-08-10 13:21:45

回答

4

我用流利的映射到一个视图,你现在是知道解决这个问题的唯一办法这样做。 Join()将始终映射到父表的主键。 KeyColumn方法只指定子表的键列,在你的情况下是Category表。

要使用您的简化版达到预期的SQL上面你可能想使用References定义状态和类别之间的多到一的关系。