使用NHibernate插入n:n关系

时间:2012-08-31 19:10:40

标签: asp.net-mvc nhibernate fluent-nhibernate

我有Orders,Items和OrderItems实体,在Orders和Items表之间有n:n关系。我使用Fluent Hibernate进行映射,在“Order”实体中有“List”属性,它具有“保护集”。插入时我面临下面的问题。

new Order.Items.Add(alreadyexistingitem);

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

在订单实体中为“items”包设置“反向”属性。所以,我需要在添加下面的项目时添加新添加的顺序,但是我怎么能这样做,因为它是具有保护集的列表对象。

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());

1 个答案:

答案 0 :(得分:2)

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

反向应该不在订单方面使用。 Inverse告诉NHibernate,关系的另一面有能力来定义和打破这种关系。订单有物品;商品无法“选择”他们所属的订单。