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

.net 如何映射以从Nhibernate中的主表中获取值?,.net,nhibernate,fluent-nhibernate,nhibernate-mapping,.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] DATETIM

当我试图从映射文件的主表中获取值时,我会遇到一个问题

我的桌子:

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 fluent接口映射类中获取全名值并映射到CustomerName属性?

实际上,您不会这样做。更好的设计是拥有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);
  }
}
如果您确实想拥有
CustomerName
属性,可以在
CustomerOrder
上创建委派属性

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

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

public string CustomerName
{
  get { return Customer.FullName; }
}
    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");
        });
    }