2

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

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

2.使用具有“ManytoMany”关系的Order和Items以及包含Order和Item属性的“OrderItems”创建Order、Items和OrderItems实体。

我的方法 1 效果很好,但想知道方法 2 的作用。

4

1 回答 1

2

如果 Items 和 Orders 之间的关系很简单(只是存在关系),那么您将在 Items.Orders 和 Orders.Items 之间进行 ManyToMany 映射。这将导致 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.Name);
HasMany(c => c.OrderItems).KeyColumn("ItemId");

订单项:

Id(c => c.Id);
Map(c => c.Quantity);
References(c => c.Order);
References(c => c.Item);
于 2012-09-01T05:46:22.830 回答