NH:niber关系中的NHibernate映射

时间:2012-09-01 05:35:08

标签: nhibernate nhibernate-mapping fluent-nhibernate-mapping

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

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

2.创建Order,Items和OrderItems实体,其中Order和Items具有“ManytoMany”关系,OrderItems包含Order和Item属性。

我有方法1可以正常工作,但想知道方法2的作用。

1 个答案:

答案 0 :(得分:1)

如果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");

OrderItem的:

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