如何映射以从Nhibernate中的主表获取值?

时间:2008-12-22 10:12:32

标签: .net nhibernate fluent-nhibernate nhibernate-mapping

当我尝试从映射文件中的主表中获取值时,我遇到了问题。

我的桌子:

CREATE TABLE Customer
(
    [CustomerId] INT PRIMARY KEY,
    [FullName] NVARCHAR(50) NOT NULL
)

CREATE TABLE CustomerOrder
(
    [CustomerOrderId] INT PRIMARY KEY,
    [CustomerId] INT,
    [TransactionDate] DATETIME
)

我的课程:

public class CustomerOrder
{
    public class Id {get; set;}
    public class CustomerName {get; set;}
    public class TransactionDate {get; set;}
}
...

如何在CustomerOrder流畅的界面映射类中获取FullName值并映射到CustomerName属性?

2 个答案:

答案 0 :(得分:1)

你不会,真的。更好的设计是拥有Customer属性,它是Customer类的实例。

public class CustomerOrder
{
  public int Id { get; set; }
  public Customer Customer { get; set; }
}

public class CustomerOrderMap : ClassMap<CustomerOrder>
{
  public CustomerOrderMap()
  {
    Id(x => x.Id);
    References(x => x.Customer);
  }
}

然后您可以这样使用:

customerOrder.Customer.FullName

如果您确实想拥有CustomerName属性,可以在CustomerOrder上创建委派属性。

public string CustomerName
{
  get { return Customer.FullName; }
}

答案 1 :(得分:0)

如果要使用Fluent-NHibernate将类映射到多个表,可以使用“WithTable”方法。

    public CustomerOrderMap()
    {
        Id(x => x.Id);
        Map(x => x.TransactionDate);

        WithTable("Customer", m =>
        {
            // Use .TheColumnNameIs since the property name is different from the column name
            m.Map(x => x.CustomerName)
                .TheColumnNameIs("FullName");
        });
    }