2014-09-19 64 views
3

我試圖找出一種方法來映射nhibernate中的一對一關係當引用列不是第二個表上的主鍵列時。通過代碼Nhibernate一對一映射

例如考慮

Person Table 
    PersonId (pk) 
    Name 

Passport Table 
    PassportId (pk) 
    Country 
    PersonId 

兩個表對PERSONID一對一的關係。

我的Nhibernate模型如下所示。

public class Person 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual Passport Passport { get; set; } 
} 

public class Passport 
{ 
    public virtual int Id { get; set; } 
    public virtual string Country { get; set; } 
    public virtual Person Person { get; set; } 
} 

基於解釋的形式this article在我定義的映射關係如下,但它沒有工作

PersonMapping:

OneToOne(x => x.Passport, x => x.Cascade(Cascade.All)); 

PassportMapping:

ManyToOne(x => x.Person, x => { x.Unique(true); x.Column("PersonId");}); 

在構建sql查詢如下

select * from Person 
left outer join Passport on Persson.PersonId = Passport.PassportId. 

它假定PassportId和PersonId具有相同的值,但在我的情況下它們是不同的。如何在使用代碼映射的情況下定義我的映射。

回答

2

我希望我的帖子將幫助你,我會告訴你我是怎麼做的這些類型的映射: 映射的人:

HasOne(x=>x.Passport).Cascade.All(); 

和護照:

References(x => x.Person).Unique(); 

希望這有助於。 後來,當你想創建一個新的記錄做到這一點,例如:

var person = new Person(); 
person.Passport = new Passport(){Person = person}; 
+0

這ansver使用功能NHibernate但問題是映射到代碼。 – Luka 2016-07-06 18:19:11