NHibernate 映射 returns 空值

NHibernate mapping returns null value

我在 NHibernate 中遇到映射问题。

Order table 具有 Invoice_Id 列,该列可为 FKInvoice table.

问题是,当我加载 InvoiceId 存在于 Order table 中,我看到 ConnectedOrder 属性 为空,为什么?

public class Invoice
{
    public virtual Order ConnectedOrder { get; set; }
}

public class Order
{
    public virtual Invoice ConnectedInvoice { get; set; }
}


public class InvoiceMap : ClassMap<Invoice>
{
    public InvoiceMap()
    {
        this.References(x => x.ConnectedOrder).Nullable();
    }
}

public class OrderMap : ClassMap<Order>
{
    public OrderMap()
    {
        this.References(x => x.ConnectedInvoice).Nullable();
    }
}

编辑

我已经像 Radim Köhler 所说的那样更改了我的 类 和映射,然后我找到了那个主题 Fluent NHibernate One-To-Many Mapping

并且还需要添加:

this.HasMany(x => x.Orders)
    .KeyColumn("Invoice_id")
    .Inverse()
    .Cascade
    .AllDeleteOrphan();

现在可以使用了

您可能不喜欢它,但是上面描述的 table 结构并不代表您创建的实体关系 (所谓的 one-to-one .

万一 table 包含引用另一个 table 的列(FK),我们有以下情况:

  • 每个订单只有一张(或空)发票。 (many-to-one)
  • 发票可以被none或一个或多个订单引用。 (one-to-many)

也就是说,我们应该这样表达实体:

public class Invoice
{   // many orders could reference us
    public virtual IList<Order> Orders { get; set; }
    ...

public class Order
{   // unchanged
    public virtual Invoice ConnectedInvoice { get; set; }
    ...

映射应该是:

public InvoiceMap()
{    // HasMany is one-to-many
     this.HasMany(x => x.Orders)
        ...
}
public OrderMap()
{   // References is many-to-one
    this.References(x => x.ConnectedInvoice).Nullable();
    ...