2010-08-09 10 views
7

Ana tablomda PK olmayan bir tablonun, yabancı tablonun PK'sine eklendiği birleşik bir tablodan tek bir özellik elde etmeye çalışıyorum.Fluent NHibernate, birincil anahtar kullanmıyor

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

CREATE TABLE Category 
(
    Id int, 
    Name text 
) 

SQL oluşturmak için:

Tablolar: Aşağıda (Ben yabancı varlık başvurmak istemiyoruz ) ne başarmaya çalışıyorum bir basitleştirilmiş örnektir

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

Bu gibi birleşimini StatusMap ile eşleştirmeye çalışıyorum ama Ben Akıcı şu anda olduğu gibi bir görünüme haritalarını çıkarmak kullanarak bu çevrede tek yolu Bildiğim kadarıyla

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

Bunu nasıl yapacağımı bilemiyorum. Bir geçici çözüm arıyorsanız, bunun yerine bir görünümü eşleştirebilirsiniz, bu genellikle bu tür şeyler için yaptığım şeydir. – cbp

+0

Şu anda bir geçici çözüm olarak kullandığım şey, ben sadece bir değilim :) – jwarzech

cevap

4

: iki birincil anahtarlar (burada Status.Id = Category.Id) üzerinde birleştirme gibi görünüyor yapıyor. Join(), her zaman üst tablonun birincil anahtarıyla eşler. KeyColumn yöntemi, yalnızca çocuk tablosu için anahtar sütununu belirtir;

İstenen SQL'inizi basitleştirilmiş sürümünüzü kullanarak elde etmek için, muhtemelen durum ve kategori arasında bire bir ilişki tanımlamak için References kullanmak isteyebilirsiniz.