繁体   English   中英

NHibernate映射和Abstract类的继承

[英]Inheritance with NHibernate mapping and Abstract class

我试图映射一个将继承其他两个类的类,我希望将其抽象化,这样我将能够返回包含两种类型的子对象的列表,并在父类中使用区分符对它们进行相应的转换。

对于我的代码示例,BD如下所示: 在此处输入图片说明

这是我的域模型:

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”类抽象化,这样我就可以拥有一个可以包含两个子类型的列表,但是我不确定该怎么做

多态不需要基类是抽象的。 您可以在包含TeacherStudent实例的List<Person>上工作,而不必使Person是抽象的。

在代码中将Person设置为抽象仅禁止创建Person实例。

在NHibernate映射中使用“每个子类的表”模型将Person设置为抽象,可以告诉NHibernate Person表必须在子类表之一中具有相应的条目。 如果您的数据库包含某些行Person没有任何相应的行StudentTeacher ,那么这是一个错误。

也许此博客可以帮助您更好地了解您应该做什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM