【问题标题】:nHibernate Null List Values on One-To-Many一对多上的 nHibernate Null 列表值
【发布时间】:2009-04-22 16:19:18
【问题描述】:

我有一个包含许多 OrderItem 的订单映射。当我只保存订单时,映射正确地将订单和订单项目保存到数据库中,但是当我重新加载该订单时,订单包含的订单项目列表填充了空值(对于所有其他订单项目表),直到它到达具有 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 才能正常工作?

【问题讨论】:

    标签: c# nhibernate one-to-many


    【解决方案1】:

    我记得我脑子里有问题

    <list> 
    

    并诉诸

    <bag> 
    

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

    通过启用对 console.out 的日志记录 (see this blog) 来查看访问数据库的实际 SQL 与您的预期有何不同可能会有所帮助。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2017-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-03
        • 1970-01-01
        • 2022-06-14
        相关资源
        最近更新 更多