n:n关系中的NHibernate映射

n:n关系中的NHibernate映射,nhibernate,nhibernate-mapping,fluent-nhibernate-mapping,Nhibernate,Nhibernate Mapping,Fluent Nhibernate Mapping,假设我有Order、Items、OrderItems表和具有n:n关系的Items,OrderItems是关联表。我看到了下面两种定义它们的方法 1.创建与OrderItems具有“HasMany”关系的Order和Items实体 2.创建订单、项目和订单项目实体,订单和项目具有“多个”关系,“订单项目”包含订单和项目属性 我有方法1,它可以很好地工作,但我想知道方法2的作用。如果项目和订单之间的关系很简单(只是存在这种关系),那么您可以在Items.Orders和Orders.Items之间进

假设我有Order、Items、OrderItems表和具有n:n关系的Items,OrderItems是关联表。我看到了下面两种定义它们的方法

1.创建与OrderItems具有“HasMany”关系的Order和Items实体

2.创建订单、项目和订单项目实体,订单和项目具有“多个”关系,“订单项目”包含订单和项目属性


我有方法1,它可以很好地工作,但我想知道方法2的作用。

如果项目和订单之间的关系很简单(只是存在这种关系),那么您可以在Items.Orders和Orders.Items之间进行多个映射。这将导致NHibernate生成并管理一个包含两个外键的简单交叉引用表

另一方面,如果有其他信息需要与两个外键一起记录,则必须使用不同的实体或值对象来捕获该信息,在两侧使用HasMany

课程:

Order
  Id
  Name
  OrderItems

Item
  Id
  Name
  OrderItems

OrderItem
  Id
  Order
  Item
  Quantity
映射:

订单:

Id(c => c.Id);
Map(c => c.Name);
HasMany(c => c.OrderItems).KeyColumn("OrderId");
项目:

订单项:

Id(c => c.Id);
Map(c => c.Quantity);
References(c => c.Order);
References(c => c.Item);
Id(c => c.Id);
Map(c => c.Quantity);
References(c => c.Order);
References(c => c.Item);