当前位置: 首页 > 编程语言 > C#

如何使用角色或组合映射NHibernate中的类

时间:2023-04-11 00:09:37 C#

HowtoMapClassesinNHibernateUsingRolesorComposition回答。问题如何映射看起来具有继承关系的实体:公司供应商制造商客户但是,供应商可以是制造商。或PersonDoctorPatientEmployee患者可以是医生或雇员。建议:使用角色在NHibernate论坛上的讨论中,回应通常是多重继承。http://forum.hibernate.org/viewtopic.php?t=959076他们建议的解决方案是使用组合或使用“角色”。但是,我找不到有关如何执行此操作的任何示例或解释。“比继承更喜欢综合。”还记得班上的小礼物吗?在这种情况下,我必须同意您正在尝试多重继承——这在C#或Java中是不可能的(目前)。就我个人而言,我鼓励您考虑重构,以便您拥有一个Person对象,并且一个Person具有一对多的角色集合。您可能需要考虑使用角色。所以一个角色会有一组人。或者一个人将拥有一组角色或两者兼而有之。这可能意味着有一个将人映射到角色的关联类。定义一个具有人们共有的所有属性的Person类。然后定义一个Role超类和DoctorRole、PatientRole和EmployeeRole子类(假设每个角色具有不同的属性)。Person类可以定义角色的集合,Role类可以定义人员的集合。或者创建一个Association类可能更容易,我们称它为PeopleRole。此页面描述如何映射以便PeopleRole成为复合元素。查看Order/Product/LineItem示例。你的Person就像Order,PeopleRole就像LineItem,而Role就像Product。在我看来,这更像是一个关于如何很好地建模域的问题,而不是一个NHibernate映射问题。一旦您整理好域建模,我想您会发现NHibernate映射相对容易。学习角色建模的一个地方是寻找“颜色建模”——JeffDeLuca有一些资源,尽管这个想法起源于PeterCord基本思想是将参与者的身份与他们在活动中扮演的角色联系起来分离。例如,您可能有一个Person对象来捕获特定人的身份。然后,一个完全独立的对象“Student”,它捕获额外的信息来记录一个学生的注册情况。每个学生实例将引用注册的人。一个人可能与许多“学生”记录相关,每个不同的注册记录一个。同时,您可以拥有一个独特的“导师”对象,记录在一对一情况下聘请的人在教授学生时所做的事情的详细信息。Tutor对象捕获有关如何聘请某人作为导师的其他详细信息。这种结构为您提供了很大的灵活性——一个人(JoeBloggs)可能只是一名学生,另一个人(JaneDoe)可能只是一名导师,第三个人(ChuckNorris)可能两者都是。此外,引入另一个角色(讲师、标记、管理员)变得更加容易,因为添加不需要更改现有对象。我发现了一些您可能会觉得相关的评论:在NakedObjects博客上的这篇博文中,概述了几种不同的方法,并讨论了每种方法的优缺点。以上就是C#学习教程的全部内容:如何在NHibernate中使用角色或组合映射类。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: