Postupy: Mapování hierarchií dědičnosti
Pokud chcete implementovat mapování dědičnosti v LINQ, musíte zadat atributy a vlastnosti atributů v kořenové třídě hierarchie dědičnosti, jak je popsáno v následujících krocích. Vývojáři, kteří používají Visual Studio, můžou k mapování hierarchií dědičnosti použít Návrhář relací objektů. Viz Postupy: Konfigurace dědičnosti pomocí Návrháře relací objektů.
Poznámka:
V podtřídách nejsou vyžadovány žádné speciální atributy ani vlastnosti. Všimněte si zejména, že podtřídy nemají TableAttribute atribut.
Mapování hierarchie dědičnosti
TableAttribute Přidejte atribut do kořenové třídy.
Do kořenové třídy přidejte InheritanceMappingAttribute také atribut pro každou třídu ve struktuře hierarchie.
Pro každý InheritanceMappingAttribute atribut definujte Code vlastnost.
Tato vlastnost obsahuje hodnotu, která se zobrazí v tabulce databáze ve IsDiscriminator sloupci, která označuje, do které třídy nebo podtřídy patří tento řádek dat.
Pro každý InheritanceMappingAttribute atribut přidejte Type také vlastnost.
Tato vlastnost obsahuje hodnotu, která určuje třídu nebo podtřídu, která označuje hodnotu klíče.
Pouze u jednoho z InheritanceMappingAttribute atributů přidejte IsDefault vlastnost.
Tato vlastnost slouží k určení náhradního mapování, pokud diskriminující hodnota z databázové tabulky neodpovídá žádné Code hodnotě v mapování dědičnosti.
IsDiscriminator Přidejte vlastnost atributuColumnAttribute.
Tato vlastnost označuje, že se jedná o sloupec, který obsahuje Code hodnotu.
Příklad
Poznámka:
Pokud používáte Visual Studio, můžete ke konfiguraci dědičnosti použít Návrhář relací objektů. Viz Postupy: Konfigurace dědičnosti pomocí Návrháře relací objektů
V následujícím příkladu Vehicle
kódu je definován jako kořenová třída a předchozí kroky byly implementovány k popisu hierarchie pro 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