Bagikan melalui


Cara: Memetakan Hierarki Warisan

Untuk menerapkan pemetaan turunan di LINQ, Anda harus menentukan atribut dan properti atribut pada kelas akar hierarki turunan seperti yang dijelaskan dalam langkah-langkah berikut. Pengembang yang menggunakan Visual Studio dapat menggunakan Object Relational Designer untuk memetakan hierarki turunan. Lihat Cara: Mengonfigurasi turunan menggunakan O/R Designer.

Catatan

Tidak ada atribut atau properti khusus yang diperlukan pada subkelas. Perhatikan khususnya bahwa subkelas tidak memiliki atribut TableAttribute.

Untuk memetakan hierarki turunan

  1. Tambahkan atribut TableAttribute ke kelas akar.

  2. Juga ke kelas akar, tambahkan atribut InheritanceMappingAttribute untuk setiap kelas dalam struktur hierarki.

  3. Untuk setiap atribut InheritanceMappingAttribute, tentukan properti Code.

    Properti ini menyimpan nilai yang muncul di tabel database di kolom IsDiscriminator untuk menunjukkan kelas atau subkelas mana dari baris data ini.

  4. Untuk setiap atribut InheritanceMappingAttribute, tambahkan juga properti Type.

    Properti ini memiliki nilai yang menentukan kelas atau subkelas mana yang ditunjukkan oleh nilai kunci.

  5. Hanya pada salah satu atribut InheritanceMappingAttribute, tambahkan properti IsDefault.

    Properti ini berfungsi untuk menetapkan pemetaan fallback jika nilai diskriminator dari tabel database tidak cocok dengan nilai Code apa pun dalam pemetaan turunan.

  6. Tambahkan properti IsDiscriminator untuk atribut ColumnAttribute.

    Properti ini menandakan bahwa objek ini adalah kolom yang menyimpan nilai Code.

Contoh

Catatan

Jika Anda menggunakan Visual Studio, Anda dapat menggunakan Object Relational Designer untuk mengonfigurasi turunan. Lihat Cara: Mengonfigurasi turunan menggunakan O/R Designer

Dalam contoh kode berikut, Vehicle didefinisikan sebagai kelas akar, dan langkah-langkah sebelumnya telah diterapkan untuk menjelaskan hierarki untuk LINQ.

[Table]
[InheritanceMapping(Code = "C", Type = typeof(Car))]
[InheritanceMapping(Code = "T", Type = typeof(Truck))]
[InheritanceMapping(Code = "V", Type = typeof(Vehicle),
    IsDefault = true)]
public class Vehicle
{
    [Column(IsDiscriminator = true)]
    public string DiscKey;
    [Column(IsPrimaryKey = true)]
    public string VIN;
    [Column]
    public string MfgPlant;
}
public class Car : Vehicle
{
    [Column]
    public int TrimCode;
    [Column]
    public string ModelName;
}

public class Truck : Vehicle
{
    [Column]
    public int Tonnage;
    [Column]
    public int Axles;
}
<Table()> _
<InheritanceMapping(Code:="C", Type:=GetType(Car))> _
<InheritanceMapping(Code:="T", Type:=GetType(Truck))> _
<InheritanceMapping(Code:="V", Type:=GetType(Vehicle), _
    IsDefault:=True)> _
Public Class Vehicle
    <Column(IsDiscriminator:=True)> _
    Private DiscKey As String
    <Column(IsPrimaryKey:=True)> _
    Private VIN As String
    <Column()> _
    Private MfgPlant As String
End Class

Public Class Car
    Inherits Vehicle
    <Column()> _
    Private TrimCode As Integer
    <Column()> _
    Private ModelName As String
End Class

Public Class Truck
    Inherits Vehicle
    <Column()> _
    Private Tonnage As Integer
    <Column()> _
    Private Axles As Integer
End Class

Lihat juga