2009-04-22 77 views
0

我有许多OrderItems的订单映射。映射正确地将Order和OrderItems保存到数据库,当我只保存Order时,但当我重新加载该订单时,订单中包含的OrderItem列表被填充空值(对于所有其他订单项表),直到它到达具有订单的外键的订单项。因此,空订单项的总数是OrderItems表的行数(没有与订单相关的实际订单项)。这里是我的映射:nHibernate一对多空值列表值

订单:

<list name="OrderItems" table="OrderItems" cascade="all" inverse="true" > 
    <key column="OrderID"/> 
    <index column="OrderItemID" /> 
    <one-to-many class="OrderItem" not-found="ignore" /> 
</list> 

OrderItem的:

<many-to-one name="Order" class="Order" column="OrderID" not-null="true" /> 

这里的秩序的类的实现:

public class Order : { 
    private IList<OrderItem> orderItems = new List<OrderItem>(); 

,我读了NHibernate的不支持列表作为关系的很多部分,但保存工作正常,只是不是负载。我是否必须将所有内容转换为集才能使其工作?

回答

1

我的头顶部的只是我记得

<list> 

有问题,并使出

<bag> 

,而不是映射到.NET IList接口。不知道这是否能解决您的问题。

什么可能会有帮助是启用日志记录,以console.out看那个被打数据库的实际的SQL是如何从预期的不同(see this blog

+0

更改为包,它的工作很棒! – Josh 2009-04-22 17:54:02

0

这不是造成的,因为你的OrderItems收藏是懒加载? 如果您在列表(或包)映射中指定lazy = false,则不应再出现这种情况。

问题offcourse是,你想懒加载OrderItems,或不? :)