NHibernate映射返回空值

NHibernate映射返回空值,nhibernate,fluent-nhibernate,nhibernate-mapping,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,我对NHibernate中的映射有问题 Order表具有Invoice\u Id列,该列是Invoice表中可为空的FK 问题是,当我加载Order表中存在Id的发票时,我看到ConnectedOrder属性为空,为什么 public class Invoice { public virtual Order ConnectedOrder { get; set; } } public class Order { public virtual Invoice ConnectedIn

我对NHibernate中的映射有问题

Order
表具有
Invoice\u Id
列,该列是
Invoice
表中可为空的
FK

问题是,当我加载
Order
表中存在
Id
发票时,我看到
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();
    }
}

现在它工作了

您可能不喜欢它,但上面描述的表结构并不代表您创建的实体关系(所谓的
一对一

如果一个表包含引用另一个表(FK)的列,则我们有以下场景:

  • 每个订单只有一张(或空)发票。(
    多对一
  • 发票可以由无订单或一个或多个订单引用。(
    一对多
这意味着,我们应该像这样表达实体:

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; }
    ...

谢谢你的解释。我更改了类,但找到的发票的订单数仍然为0。我还尝试加载订单计数>0的所有发票,但是如果您具有我所描述的映射,则找不到具有该条件的发票。而且,您明确使用了
HasMany
设置
.KeyColumn(“发票Id”)
引用
设置
列(“发票Id”)
。。。然后,如果您在一个会话中-并且数据在那里。。。全部将加载。(确保会话未关闭)。你能检查一下吗?上面的映射是可以的。请看我的帖子编辑,现在我让它工作了。谢谢你的帮助!
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();
    ...