考慮這兩個類之間的關係如何引用NHibernate的關係的class和id屬性
public class Order
{
public int OrderId {get;set;}
public int CustomerId {get;set;} // Should this be here?
public Customer Customer{get;set}
}
public class Customer
{
public int CustomerId {get;set;}
public string Name {get;set;}
}
我明白,我不需要在訂購的客戶編號財產,我同意這不是最美麗的面向對象的做事方式。只有客戶財產,我可以輕鬆請求Order.Customer.CustomerId獲取客戶的Id。
但在這種情況下,NHibernate的,將觸發對數據庫的請求加載客戶和有我需要的只是秩序的客戶編號一些(其實很多)病例。在這種情況下,CustomerId在訂單類將是有用的,並將需要較少的數據庫訪問。 (如果我對此有錯,請糾正我)。
問題1:有沒有辦法告訴NHibernate,我希望兩個屬性總是更新?
酒店客戶編號總是有客戶和財產客戶的Id將被懶加載只有當我想(比方說,以獲得客戶的名字)。 Microsoft Entity Framework允許這樣做。
問題2:如果不可能,我應該擔心這個嗎?
UPDATE
繼答案說明我做了一個試驗試圖檢查原因(對我來說)如預期NHibernate的不工作,發現一些有趣的事情:NHibernate的默認不會在訂購訪問數據庫.Customer.CustomerId如果我不使用Accessor.Field映射 CustomerId屬性。
使用默認的訪問器,它按預期工作。任何想法爲什麼?
對於order.customer.id發出對數據庫的調用是錯誤的。我會建議放棄你的外鍵。因此,q1和q2是多餘的 – Rippo 2013-03-20 07:27:37
@Rippo:我在penfold的回答中發表了同樣的評論:我可能做了一些錯誤的事情,但在測試中,A.B.Id確實擊中了數據庫。是關於多對一的映射嗎?它是否渴望? – 2013-03-20 11:58:49
@RogerKiihl:沒有看到映射和測試代碼,這是不可能告訴的。請問你可以用這些類的映射和你使用的測試代碼來更新你的問題嗎? – mickfold 2013-03-20 12:30:08