我正在尝试映射一个其他两个类将继承的类,我希望将其设为抽象,这样我就能返回一个包含两种子对象的列表,并在父对象中使用一个鉴别器进行相应的转换类。
以下是我的域模型:
public class Person
{
public int id {get; set;}
public string name{get; set;}
}
public class Teacher : Person
{
public string subject{get; set;}
}
public class Student : Person
{
public string grade{get; set;}
}
我的Nhibernate映射:
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping namespace="Domain.Model" assembly="Domain" xmlns="urn:nhibernate-mapping-2.2" auto-import="false">
<class name="Person" table="`Person`" schema="`PR`">
<id name="id" access="property" column="`id`">
<generator class="identity"/>
</id>
<property name="id" type="int" column="`id`" />
<property name="name" type="String" column="`name`" />
<joined-subclass name="Teacher" table="`Teacher`" schema="`PR`">
<key column="`id`" />
<property name="subject" type="String" column="`subject`" />
</joined-subclass>
<joined-subclass name="Student" table="`Student`" schema="`PR`">
<key column="`id`" />
<property name="grade" type="String" column="`grade`" />
</joined-subclass>
</class>
</hibernate-mapping>
我希望将我的“Person”类抽象化,这样我就可以有一个包含两种子类型的列表,但我不知道该怎么做
答案 0 :(得分:1)
Polymorphism不要求基类是抽象的。您可以处理包含List<Person>
和Teacher
个实例的Student
,而无需Person
抽象。
在代码中将Person
设置为抽象,仅禁止创建Person
实例。
将Person
设置为NHibernate映射中的抽象,每个子类使用一个&#39;表&#39; model告诉NHibernate Person
表必须在其中一个子类表中有相应的条目。如果您的数据库包含Person
中的某些行,而Student
或Teacher
中没有任何相应的行,那么这是一个错误。
也许这个blog可以帮助您更好地理解您应该做些什么。