【问题标题】:NHibernate mapping returns null valueNHibernate 映射返回空值
【发布时间】:2015-04-05 05:28:34
【问题描述】:

我在 NHibernate 中的映射有问题。

Order 表具有 Invoice_Id 列,该列是 Invoice 表的可为空的 FK。

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

现在可以了

【问题讨论】:

    标签: nhibernate fluent-nhibernate nhibernate-mapping


    【解决方案1】:

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

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

    • 每个订单只有一张(或空)发票。 (many-to-one)
    • 发票可以不被一个或一个或多个订单引用。 (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();
        ...
    

    【讨论】:

    • 感谢您的解释。我更改了类,但找到的 Invoice 的 Orders count = 0。我还尝试加载 Orders count > 0 的所有 Invoice,但未找到符合该条件的 Invoice
    • 好吧,如果你有我描述的映射,甚至更多,你明确地使用了HasMany 设置.KeyColumn("Invoice_Id") 和References 你有.Column('Invoice_Id') ...那么如果你在一个会话内 - 并且数据在那里......所有内容都将被加载。 (确保会话未关闭)。你能检查一下吗?上面的映射没问题。
    • 查看我的帖子编辑,现在我成功了。感谢您的帮助!
    猜你喜欢
    • 2014-11-20
    • 2019-10-22
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多