![](/img/trans.png)
[英]One-to-one Mapping issue with NHibernate/Fluent: Foreign Key not updateing
[英]Is it one-to-one or Component ? Nhibernate Mapping
假設我有 Person 和 Address 類,並且它們在 DB 中有不同的表。
一個人可以有一個地址類。 這對我來說是重要的部分。 一個人只能有一個地址作為它的子元素,我想將它們保存在數據庫的不同表中。
通常我知道我需要將它們放在同一張桌子上,但我的場景需要這個。
(而且它看起來像一對多,但我不想只為一個對象創建一個集合)
Person Address
------- -------
id id
Name PersonId
StreetName
和班級代碼
Person
--------
public virtual long Id{get;set;}
public virtual Address MyAddress {get;set;}
如您所見,當我得到任何 Person 時,我想親自獲得 Address 屬性? 但是它們在不同的表中。 如何進行這種映射?
提前致謝
您不能使用組件映射地址,因為它有自己的表。 如果所有字段都在一張表中,則可以使用它。 從休眠參考:
組件元素將子對象的屬性映射到父類的表的列。
您應該使用一對一關系來映射場景中的表和類。
要在數據庫中強制執行一對一,您還可以對 Address 表中的 PersonId 設置唯一約束。
你確定是一對一的關系? 我認為這是一種多對一的關系,因為通常一個人可以住在某個地址。
無論如何,如果是多對一的關系,我會像這樣映射它們。 在你的情況下,我會做的是從地址表中刪除 PersonId FK 並從人員表中引用地址表,這樣你就會有這樣的東西。
Person Address
------ -------
id id
Name StreetName
AddressId
<many-to-one name="MyAddress" class="Address" column="AddressId"/>
如果您確實堅持一對一的關系,我建議將兩個表合並在一起。
我在 Person 映射中使用了下面的代碼來完成它。
<one-to-one lazy="proxy" name="MyAddress" class="Address" property-ref="PersonId" cascade="delete" />
希望能幫助別人
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.