2010-02-03 125 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