2010-08-09 9 views
7

Ich versuche, eine einzelne Eigenschaft aus einer Join-Tabelle zu erhalten, wo ein Nicht-PK in meiner Haupttabelle mit dem PK der Fremdtabelle verbunden ist. Unten ist ein vereinfachend Beispiel dafür, was ich zu erreichen versuchen (Ich will nicht die ausländische Gesellschaft verweisen):Fließende NHibernate Join verwendet keinen Primärschlüssel

Tables:

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

CREATE TABLE Category 
(
    Id int, 
    Name text 
) 

SQL generieren:

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

Ich versuche, den Join wie folgt in der StatusMap zuzuordnen es scheint, auf den beiden Primärschlüssel (wobei Status.Id = Category.Id) Beitritt zu:

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

Ich kann nicht herausfinden, wie dies auch zu tun ist. Wenn Sie nach einem Workaround suchen, können Sie möglicherweise stattdessen eine Ansicht zuordnen, was ich normalerweise für diese Art von Sache tue. – cbp

+0

Das ist, was ich derzeit als Workaround verwende, froh, dass ich nicht der einzige bin :) – jwarzech

Antwort

4

Soweit ich den einzigen Weg, um dies weiß, mit Fluent zu Hinblick auf der Karte, die Sie zur Zeit sind tun. Join() wird immer dem Primärschlüssel der Elterntabelle zugeordnet. Die KeyColumn-Methode gibt nur die Schlüsselspalte für die untergeordnete Tabelle an, in Ihrem Fall die Kategorietabelle.

Um die gewünschte SQL mit Ihrer vereinfachten Version oben zu erreichen, möchten Sie wahrscheinlich verwenden, um eine Viele-zu-eins-Beziehung zwischen Status und Kategorie zu definieren.

Verwandte Themen