问题在标题中:
如何将多对多关系表作为实体?
我想说,你的问题很有道理。看看这个文档部分:Chapter 24. Best Practices。摘录:
不要使用奇异的关联映射:
真正多对多关联的实际测试用例很少见。大多数时候,您需要存储在“链接表”中的附加信息。在这种情况下,最好使用两个一对多关联到一个中间链接类。事实上,大多数关联都是一对多和多对一的。因此,在使用任何其他关联样式时应谨慎行事。
我们处理这个问题的方法是引入配对对象。所以,如果有一个Employee
有很多Contacts
,我们可以有EmployeeContact
。这样我们可以收获很多,因为我们可以用更多/新属性(IsMain、IsActive 等)丰富 EmployeeContact
在这种情况下,双方的映射是
one-to-many
(设置)EmployeeContactsone-to-many
(设置)EmployeeContactsmany-to-one
(关系)员工many-to-one
(关系)联系人因此,最后,映射是通常的,但我们可以使用子查询等搜索员工或联系人。
注意:在这种情况下是合适的,如果配对表有自己的代理键,例如 EmployeeContactId。它可以随时添加..例如带有身份...