n :n relatinship 中的 NHibernate 映射

标签 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 的作用。

最佳答案

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

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

类(class):

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);

关于n :n relatinship 中的 NHibernate 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12225198/

相关文章:

.net - 由索引上的页锁引起的sql server compact死锁

c# - NHibernate 什么时候执行我的查询?

c# - 使用 nhibernate 和 mvc 进行分页

c# - 双向保存的流畅 nhibernate 映射

c# - 将属性映射到不同的表 Fluent NHibernate

xml - 数据库中的 NHibernate XML 文档到实体中的 Expando 对象

c# - DDD : Can a Value Object have lists inside them?

nhibernate - Hibernate/NHibernate 映射文件编辑器

NHibernate AssertException : Interceptor. OnPrepareStatement(SqlString)返回null或为空SqlString

c# - 在 nHibernate 中为泛型类建模的最佳方式