2015-04-29 32 views
0

我用流利的NHibernate和有2個實體:爲什麼流利的nhibernate automapping會創建許多外鍵而不是一個?

public class Document 
{ 
    public virtual int Id { get; protected set; } 
    public virtual string Name { get; set; } 
    public virtual User Author { get; set; } 
    public virtual DateTime Date { get; set; } 
} 

public class User 
{ 
    public virtual int Id { get; protected set; } 
    public virtual string Name { get; set; } 
    public virtual IList<Document> Docs { get; set; } 
    public User() 
    { 
     Docs = new List<Document>(); 
    } 
} 

,我不明白爲什麼FNH創建這個simpliest實體錯誤的架構。這就是FNH創造了我的DB:

a busy cat http://i008.radikal.ru/1504/4b/25dcc9148f7e.png

我不明白爲什麼FNH創建2個引用(AUTHOR_ID和USER_ID)到用戶表,而不是一個單一的基準(僅AUTHOR_ID)。

我發現這裏的解決辦法Fluent Nhibernate AutoMapping -- 2 foreign keys to same table?這裏Fluent NHibernate Automappings generating 2 foreign keys for 1 relationship,但我不想使用它,因爲我不明白爲什麼我應該建立的每一件事情由我的手,如果我使用automappings應該做所有的工作對我來說(至少在我的實體中最簡單明顯的映射)。

回答

0

您有一個Document實體通過一個名爲Author的屬性引用一個User實體(0-1關係),但同時在User實體中引用Document以一對多的關係。

功能NHibernate自動映射的工作原理與約定,具體HasManyConvention映射關係創建一個基於名稱的外鍵的名稱(而不是類型)的參考實體(在這種情況下,USER)

所以NHibernate的,當創建User和Document之間的關係時,在Document表中創建一個User_Id鍵。這是一個正確的約定行爲。

+0

**您正在映射一對多的關係以及另一方面的0對1的關係** - 不明白這一點。我有用戶作者的類文檔和用戶列表的文檔。我認爲這對用戶來說是1到1,對於Document來說是1到1。所以,我不明白你爲什麼說我有0比1和1比1. – user3649516

+0

對不起,我沒有明白你的觀點。我現在得到它。 – Hellraiser

+0

我修改了答案。希望能幫助到你 – Hellraiser

相關問題