2010-02-03 118 views
0

我有以下表並不能修改其結構...功能NHibernate映射不是在PK場

Person 
------ 
Id PK 
Code 
Name 

Order 
----- 
Id PK 
Person_Code 
OrderDetails 
在我的Person類

現在我想有訂單的那個人的名單,但我我不完全確定如何設置流暢的nhibernate映射來匹配Code列而不是ID。沒有外鍵約束,我無法將數據庫更改爲使用鍵。像這樣的東西是我所需要的,但似乎無法找出映射。

public class Person 
{ 
    public virtual int Id { get; set; } 
    public virtual string Code { get; set; } 
    public virtual IList<Order> Orders { get; private set; } 
} 

public class Order 
{ 
    public virtual int Id { get; set; } 
    public virtual string OrderDetails { get; set; } 
    public virtual Person Owner { get; set; } 
} 

回答

2

您定義一個與KeyColumn方法你列。它應該工作,不管外鍵約束的存在。

class PersonMap : ClassMap<Person> 
{ 
    public PersonMap() 
    { 
     HasMany(p => p.Order) 
      .KeyColumn("Person_Code") 
      .PropertyRef("Code"); 
    } 
} 

PropertyRef方法可從rev 614,所以你可能需要更新的功能NHibernate的版本。

+0

但是它如何知道Person表中的哪一列呢? – 2010-02-03 15:25:48

+0

我第一次錯過了,對不起。我更新了答案以反映您的問題。 – 2010-02-03 15:34:17

+0

我想我必須使用舊版本的Fluent庫,因爲我沒有得到PropertyRef方法。將嘗試更新。 – 2010-02-03 15:41:46