Instrukcje: Mapowanie hierarchii dziedziczenia
Aby zaimplementować mapowanie dziedziczenia w LINQ, należy określić atrybuty i właściwości atrybutów w klasie głównej hierarchii dziedziczenia zgodnie z opisem w poniższych krokach. Deweloperzy korzystający z programu Visual Studio mogą używać Projektant obiektowych do mapowania hierarchii dziedziczenia. Zobacz Instrukcje: konfigurowanie dziedziczenia przy użyciu Projektant O/R.
Uwaga
W podklasach nie są wymagane żadne atrybuty specjalne ani właściwości. Należy pamiętać, że podklasy nie mają atrybutu TableAttribute .
Aby zamapować hierarchię dziedziczenia
TableAttribute Dodaj atrybut do klasy głównej.
Ponadto do klasy głównej dodaj InheritanceMappingAttribute atrybut dla każdej klasy w strukturze hierarchii.
Dla każdego InheritanceMappingAttribute atrybutu zdefiniuj Code właściwość.
Ta właściwość zawiera wartość wyświetlaną w tabeli bazy danych w kolumnie, IsDiscriminator aby wskazać, do której klasy lub podklasy należy ten wiersz danych.
Dla każdego InheritanceMappingAttribute atrybutu Type dodaj również właściwość .
Ta właściwość zawiera wartość określającą, która klasa lub podklasa oznacza wartość klucza.
W przypadku tylko jednego z InheritanceMappingAttribute atrybutów dodaj IsDefault właściwość .
Ta właściwość służy do wyznaczania mapowania rezerwowego , gdy dyskryminująca wartość z tabeli bazy danych nie pasuje do żadnej Code wartości w mapowaniach dziedziczenia.
IsDiscriminator Dodaj właściwość atrybutuColumnAttribute.
Ta właściwość oznacza, że jest to kolumna zawierająca Code wartość.
Przykład
Uwaga
Jeśli używasz programu Visual Studio, możesz skonfigurować dziedziczenie przy użyciu Projektant relacyjnych obiektów. Zobacz Instrukcje: konfigurowanie dziedziczenia przy użyciu Projektant O/R
W poniższym przykładzie Vehicle
kodu zdefiniowano jako klasę główną, a poprzednie kroki zostały zaimplementowane w celu opisania hierarchii 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