0

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

命令:

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

订单项:

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

这是 Order 的类实现:

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

我读到 nHibernate 不支持列表作为关系的许多部分,但保存工作正常,只是不支持加载。我是否必须将所有内容都转换为 Sets 才能使其正常工作?

4

2 回答 2

1

就在我头顶,我记得有问题

<list> 

并采取了

<bag> 

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

可能有帮助的是通过启用对 console.out 的日志记录来查看访问数据库的实际 SQL 与您的期望有何不同(请参阅此博客

于 2009-04-22T16:33:12.763 回答
0

这不是因为您的 OrderItems 集合是延迟加载的吗?如果您在列表(或袋子)映射上指定了lazy=false,那么这种情况就不应该再出现了。

问题是,你想延迟加载 OrderItems,还是不想?:)

于 2009-04-22T16:45:36.633 回答