1

鑑於兩個表零關係:一對一或功能NHibernate

___________ 
|Table1  | 
|-----------| 
|Id   | 
|___________| 
___________ 
|Table2  | 
|-----------| 
|Id   | 
|Table1_Id | 
|___________| 

凡表2記錄不neccesserily必須存在(即關係是一個{}表1 -to-OneOrZero {}表2)。

我需要能夠使用映射到Table1的父類保存和檢索兩個表中的數據。

的實體如下:

public class Table1 
{ 
    int Id {get; set;} 
    Table2 Table2 {get; set;} 
} 
public class Table2 
{ 
    int Id {get; set;} 
} 

...我已經創建的映射如下:

public class Table1Map 
{ 
    this.Id(x => x.Id); 
    HasOne(x => x.Table2).Cascade.All(); 
} 

public class Table2Map 
{ 
    this.Id(x => x.Id); 
} 

...這對於閱讀,但不能寫入數據工作正常,因爲它試圖將NULL插入到Table2.Table1_Id列中,而不是從Table1.Id屬性中獲取它。

有沒有辦法讓插入的工作無需創建雙向引用,即Table1屬性Table2 class

回答

-1

通常情況下,您只需使用References而不是HasOne。見I think you mean a many-to-one, sir

文章摘要:HasOne或一對一關係專門用於兩個表共享主鍵的關係。

+1

對不起,因爲我已經'不同的情況表1(「客戶」)沒有「Table2_Id」列(「AddressId」)。 – Tsar

0

我最近在SO中遇到過這個問題。就關係而言,正如@Hacked已經提到的那樣,它不能是HasOne,因爲它們沒有共享一個主鍵。考慮使用的hasMany(不是很確定)和單向關係缺失的部分是Not.KeyUpdate

public class Table1Map 
{ 
    this.Id(x => x.Id); 
    HasMany(x => x.Table2) 
    .Not.KeyUpdate() <--here 
    .Cascade.All(); 
} 

下面是引用鏈接

NHibernate configuration for uni-directional one-to-many relation

NHibernate still issues update after insert