NHibernate映射返回空值
我对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
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();
...