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

从NHibernate中的另一个表将属性映射到字段,nhibernate,hibernate,hibernate-mapping,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表?是的,您可以为此使用映射元素。另一个选项是映射视图而不是表。但是如果可能的话,您应该采用面向对象的方法

考虑以下类别:

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

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

是的,您可以为此使用映射元素。另一个选项是映射视图而不是表。但是如果可能的话,您应该采用面向对象的方法,并映射订单和客户之间的多对多关系。

我强烈建议您不要为此使用
。虽然它可以实现您的要求,但它会产生其他问题

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

因此,它归结为:

1) 将
客户
属性添加到
订单

public virtual Customer Customer { get; set; }
2) 映射属性(在示例中,CustomerId是FK列的名称)


您能详细解释一下join映射元素吗?外键在Order类/表中,而不是在您提供的示例页面中的其他表中;它必须读取整个客户记录才能显示名称。如果启用客户实例缓存,它将比join更高效。NHibernate支持缓存吗?或者我必须自己去实现它?是的。阅读文档:我不知道如何使用join来实现这一点。根据Join()的文档,外键应该在引用的表中,但是在我的例子中,外键在同一个表中。我决定暂时使用视图。
<many-to-one name="Customer" column="CustomerId"/>
public virtual string CustomerName { get { return Customer.Name; } }