C# · 12月 22, 2021

c# – 如何使用Roles或Composition在NHibernate中映射类

我相信这是一个常见的问题/问题,但未能找到一个干净简洁的答案.

问题

如何映射看似具有继承关系的实体:

Company supplier Manufacturer Customer

但是,供应商可以是制造商.

要么

Person Doctor Patient Employee

患者可以是医生,也可以是员工.

建议:使用角色

在NHibernate论坛的讨论中,响应通常是多重继承.

http://forum.hibernate.org/viewtopic.php?t=959076

他们建议的解决方案是使用组合或使用“角色”.但是,我找不到任何关于如何做到这一点的例子或解释.

“Favor composition over inheritance.”
Remember that little goodie from
class? In this instance I have to
agree that you are trying multiple
inheritance– not possible in C# or
Java (yet). I,personally,would
encourage you to think about
re-modeling so you have a Person
object and a person has a one-to-many
collection of Roles.

解决方法 您可能想要考虑使用角色.因此角色将拥有一组人员.或者一个人将拥有一组角色或两者兼而有之.这可能意味着有一个将人员映射到角色的关联类.

使用人们共有的所有属性定义Person类.然后定义一个Role超类和DoctorRole,PatientRole和EmployeeRole子类(假设每个角色都有不同的属性).

Person类可以定义一组角色,Role类可以定义一组人员.或者创建一个Association类可能更容易,我们称之为PeopleRole.

This页面解释了如何进行映射,以便PeopleRole是一个复合元素.查看Order / Product / LineItem示例.你的人就像Order,PeopleRole就像LineItem,Role就像Product.