将属性映射到NHibernate中另一个表的字段

时间:2010-03-20 22:59:41

标签: nhibernate hibernate hibernate-mapping

考虑以下课程:

class Order {
    int OrderId {get; set;}
    int CustomerId {get; set;}
    string CustomerName {get; set;}
    //other fields go here
}

映射到Orders表。是否可以通过外键关系将属性CustomerName映射到Customers表?

2 个答案:

答案 0 :(得分:0)

是的,您可以使用join映射元素。另一种选择是映射视图而不是表。但是如果可能的话,你应该采用面向对象的方法并映射Order和Customer之间的多对多关系。

答案 1 :(得分:0)

我强烈建议您不要使用<join/>。虽然它可以完成您的要求,但它会产生其他问题。

相反,订单应与客户建立关系。然后,您可以根据需要投影名称,尽管使用order.Customer.Name更容易。

所以,归结为:

1)将Customer属性添加到Order

public virtual Customer Customer { get; set; }

2)映射属性(在示例中,CustomerId是FK列的名称)

<many-to-one name="Customer" column="CustomerId"/>

3)如果您特别想拥有CustomerName属性,请从客户预测:

public virtual string CustomerName { get { return Customer.Name; } }