我有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());
答案 0 :(得分:2)
作为初步答案,NHibernate足够聪明,可以知道何时在两个地方使用相同的对象引用。您需要的只是Order和Item之间映射中的“HasManyToMany”关系。
反向应该不在订单方面使用。 Inverse告诉NHibernate,关系的另一面有能力来定义和打破这种关系。订单有物品;商品无法“选择”他们所属的订单。