0

我有 Orders、Items 和 OrderItems 实体,Orders 和 Items 表之间有 n:n 关系。我正在使用 Fluent Hibernate 进行映射,在“订单”实体中有“列表”属性,该属性具有“保护集”。我在插入时面临以下问题。

new Order.Items.Add(alreadyexistingitem);

由于它已经存在项目,在 orderitems 表中,需要将一条记录插入到 orderitems 表中,其中包含新的 orderid 和现有的项目 id。但是只有新的订单详细信息被插入到订单表中,而不是关联表中。

在订单实体中为“items”包设置了“Inverse”属性。所以,我需要在添加如下项目时附加新添加的订单,但我该怎么做,因为它是带有保护集的列表对象。

Orders.Items.Add(alreadyexistingitem, *order = "neworder"*);

下面是映射:

   model.Override<Order>(m =>
   {      

                    m.HasManyToMany(c => c.Items)
                        .Table(Constants.TABLE_PREFIX + "OrderItem")
                        .Inverse()
                        .Cascade.AllDeleteOrphan();
    });



  model.Override<Item>(m => m.HasManyToMany(c => c.Orders)
                                            .Table(Constants.TABLE_PREFIX + "OrderItem")
                                            .Cascade.None());
4

1 回答 1

2

作为初步答案,NHibernate 足够聪明,可以知道何时在两个地方使用了相同的对象引用。您只需要在 Order 和 Item 之间的映射中建立一个“HasManyToMany”关系。

可能不应该在订单方面使用逆。Inverse 告诉 NHibernate,关系的另一方有权定义和破坏关系。订单有物品;项目无法“选择”它们所属的顺序。

于 2012-08-31T19:16:52.153 回答