【问题标题】:NHibernate mapping in n:n relatinshipn:n 关系中的 NHibernate 映射
【发布时间】:2012-09-01 05:35:07
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案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");
    

    订单项:

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

    【讨论】:

      猜你喜欢
      • 2012-08-26
      • 2011-07-14
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      • 2017-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多