NHibernate 映射 returns 空值
NHibernate mapping returns null value
我在 NHibernate 中遇到映射问题。
Order
table 具有 Invoice_Id
列,该列可为 FK
到 Invoice
table.
问题是,当我加载 Invoice
时 Id
存在于 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();
...
我在 NHibernate 中遇到映射问题。
Order
table 具有 Invoice_Id
列,该列可为 FK
到 Invoice
table.
问题是,当我加载 Invoice
时 Id
存在于 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();
...