2011-05-24 48 views
1

這是hbm式nhibernate的基本示例。如何使用Fluent nHibernate使用FK-> PK關係使用來自主實體的外鍵映射多表實體?

http://ayende.com/blog/2327/multi-table-entities-in-nhibernate

public class Person 
{ 
    public int PersonId {get;set;} 
    public string Name {get;set;} 
    public string AddressStreetAddress {get;set;} 
    public string AddressZipCode {get;set;} 
} 

在數據庫中,人有標識的主鍵,名稱字段和地址外鍵。地址有自己的主鍵,街道地址字段和郵政編碼字段。

正確的答案是「不這樣做。」不幸的是,我被一個實體對象卡住了,這個實體對象公開了另一個實體的Id和Name,並且這些實體仍然在其他地方使用。目前,這個對象不會通過nHibernate持久保存回數據庫。

我認爲要做到這一點的方法是使用的地址作爲實體的表,從加入()添加的聯繫人字段。做這個轉變的中間步驟會有什麼後果?

回答

1

我認爲要做到這一點的方法是使用 地址作爲實體 的表並從 添加的聯繫人字段加入()。 做這個作爲 轉換的中間步驟的後果是什麼?

這是一個壞主意,因爲您可以映射到的唯一ID是可以在多個人之間共享的地址的ID。

相反,對於地址添加私有/保護財產的人,地圖地址,並使用以下流利的呼叫參考地址。

References(Reveal.Member<Person, Address>("Address")).Column("address_id") 

然後,您可以使用AddressStreetName和AddressZipCode通過,從而使Address.StreetName和Address.Zipcode。在那之後,重構系統的其他部分再次變得健全是一件簡單的事情。

相關問題