簡體   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