2011-09-26 37 views
4

我無法讓Fluent Nhibernate Automapper創建我想要的東西。我有兩個實體,它們之間有一對多的關係。流暢的NHibernate與干預連接表的一對多?

class Person 
    { 
     public string name; 
     IList<departments> worksIn; 

    } 

    class Department 
    { 
     public string name; 
    } 

以上顯然是裸露的骨頭,但我會期待產生的充實架構:不幸的是

Person{id, name} 
Department{id, name} 
PersonDepartment{id(FK person), id(Fk Department)} 

,我不是得到:

Person{id, name} 
Department{id, name, personid(FK)} 

我不不想要包含在部門表中的Person的FK,我想要一個單獨的聯合/查找表(上面的PersonDepartment),它包含兩個表的主鍵作爲組合PK和FKS。

我不確定如果我正在繪製我的初始類錯誤(也許應該只是在工作中 - 代表ids,而不是List worksIn),或者如果我需要手動映射它?

可以這樣做嗎?

+0

請問這個問題涉及到功能NHibernate? –

+0

對不起,是的。我會重新編輯。 – user676767

回答

0

類的結構方式表明了一對多的關係(事實上,這就是你如何在你的問題中描述它),所以FNH選擇以這種方式建模數據庫關係應該不會感到意外。

正如您所建議的那樣,您可以手動創建多對多表格映射。但是,這絕對是你想要的嗎?

我傾向於發現純多對多的關係是非常罕見的,並且通常引入中間實體並使用兩個一對多關係通常是很好的情況。這使得可以向該鏈接添加額外的信息(例如,一個人的「主要」部門,或者他們各自部門內的辦公室的詳細信息)。

一些示例「裸機」類說明這種結構:

public class Person 
{ 
    public int Id { get; set;} 

    public string Name { get; set;} 

    public IList<PersonDepartment> Departments { get; set; } 
} 

public class PersonDepartment 
{ 
    public int Id { get; set; } 

    public Person Person { get; set; } 

    public Department Department { get; set; } 

    public bool IsPrimary { get; set; } 

    public string Office { get; set; } 
} 

public class Department 
{ 
    public int Id { get; set; } 

    public IList<PersonDepartment> Personnel { get; set; } 

    public string Name { get; set; } 
} 
+0

這絕對是正確的路線。出於某種原因,我並不認爲我需要映射中間實體本身。現在這種關係只需要從Person到Department,所以不需要Personnel。問題是我從非休眠方式來到它,更習慣於在返回對象之前遍歷sql中的中間方法。非常感謝你的幫助! – user676767