Udostępnij za pośrednictwem


InheritanceMappingAttribute Klasa

Definicja

Mapuje hierarchię dziedziczenia w aplikacji LINQ to SQL.

public ref class InheritanceMappingAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Class, AllowMultiple=true, Inherited=false)]
public sealed class InheritanceMappingAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Class, AllowMultiple=true, Inherited=false)>]
type InheritanceMappingAttribute = class
    inherit Attribute
Public NotInheritable Class InheritanceMappingAttribute
Inherits Attribute
Dziedziczenie
InheritanceMappingAttribute
Atrybuty

Przykłady

W tym przykładzie pokazano mapowanie dziedziczenia dla hierarchii, w której górna, zamapowana klasa (Shape) jest abstrakcyjna.

public enum ShapeType
{
    Square = 0, Circle = 1
}
[Table(Name = "Shape")]
[InheritanceMapping(Code = ShapeType.Square, Type = typeof(Square),
    IsDefault = true)]
[InheritanceMapping(Code = ShapeType.Circle, Type = typeof(Circle))]

abstract public class Shape
{
    [Column(IsDiscriminator = true)]
    public ShapeType ShapeType = 0;
}

public class Square : Shape
{
    [Column]
    public int Side = 0;
}
public class Circle : Shape
{
    [Column]
    public int Radius = 0;
}
Public Enum ShapeType As Integer
    Square = 0
    Circle = 1
End Enum

<Table(Name:="Shape")> _
<InheritanceMapping(Code:=ShapeType.Square, Type:=GetType(Square), _
    IsDefault:=True)> _
<InheritanceMapping(Code:=ShapeType.Circle, Type:=GetType(Circle))> _
Public MustInherit Class Shape
    <Column(IsDiscriminator:=True)> _
        Public ShapeType As ShapeType = 0
End Class

Public Class Square
    Inherits Shape
    <Column()> _
    Public Side As Integer = 0
End Class

Public Class Circle
    Inherits Shape
    <Column()> _
    Public Radius As Integer = 0
End Class

W poniższym przykładzie pokazano dołączenie niezamapowanych klas. Można umieścić niezamapowane klasy w dowolnym miejscu w hierarchii.

// Unmapped and not queryable.
class A {  }

// Mapped and queryable.
[Table]
[InheritanceMapping(Code = "B", Type = typeof(B),
IsDefault = true)]
[InheritanceMapping(Code = "D", Type = typeof(D))]
class B: A {  }

// Unmapped and not queryable.
class C: B {  }

// Mapped and queryable.
class D: C {  }

// Unmapped and not queryable.
class E: D {  }
' Unmapped and not queryable.
Class A
End Class

' Mapped and queryable.
<Table()> _
<InheritanceMapping(Code:="B", Type:=GetType(B), _
IsDefault:=True)> _
<InheritanceMapping(Code:="D", Type:=GetType(D))> _
Class B
    Inherits A
End Class

' Unmapped and not queryable.
Class C
    Inherits B
End Class

' Mapped and queryable.
Class D
    Inherits C
End Class

' Unmapped and not queryable.
Class E
    Inherits D
End Class

Uwagi

Jeden InheritanceMappingAttribute jest określony na zamapowanej klasie.

Podczas mapowania hierarchii dziedziczenia należy pamiętać o następujących kwestiach:

  • Wszystkie klasy w hierarchii muszą być mapowane na jedną tabelę.

  • Tabela hierarchii dziedziczenia musi być zadeklarowana na mapowanym typie, który znajduje się w górnej części hierarchii. Nie można określić atrybutów tabeli lub mapowania w klasie pochodzącej z najwyższej klasy.

  • Można użyć interfejsu w hierarchii, ale LINQ nie mapuje go.

  • Klasę w hierarchii można pominąć podczas mapowania klas, ale można wykonywać zapytania tylko względem zamapowanych klas.

W celu poprawnego materializacji wartości kodu dyskryminującego muszą być unikatowe i zgodne z wartościami w bazie danych. Wiersz z dyskryminującą wartością kodu, która nie jest dokładnie zgodna (nawet przez wielkość liter) tworzy wystąpienie klasy przy użyciu wartości IsDefault .true

Konstruktory

InheritanceMappingAttribute()

Inicjuje nowe wystąpienie klasy InheritanceMappingAttribute.

Właściwości

Code

Pobiera lub ustawia dyskryminującą wartość kodu w zamapowanej hierarchii dziedziczenia.

IsDefault

Pobiera lub ustawia, czy obiekt tego typu tworzy wystąpienie, gdy wartość dyskryminująca nie jest zgodna z określoną wartością.

Type

Pobiera lub ustawia typ klasy w hierarchii.

TypeId

Po zaimplementowaniu w klasie pochodnej pobiera unikatowy identyfikator dla tego Attributeelementu .

(Odziedziczone po Attribute)

Metody

Equals(Object)

Zwraca wartość wskazującą, czy to wystąpienie jest równe podanemu obiektowi.

(Odziedziczone po Attribute)
GetHashCode()

Zwraca wartość skrótu dla tego wystąpienia.

(Odziedziczone po Attribute)
GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
IsDefaultAttribute()

Podczas zastępowania w klasie pochodnej wskazuje, czy wartość tego wystąpienia jest wartością domyślną dla klasy pochodnej.

(Odziedziczone po Attribute)
Match(Object)

Po przesłonięciu w klasie pochodnej zwraca wartość wskazującą, czy to wystąpienie jest równe określonemu obiektowi.

(Odziedziczone po Attribute)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Jawne implementacje interfejsu

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Zestaw nazw jest mapowany na odpowiedni zestaw identyfikatorów wysyłania.

(Odziedziczone po Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Pobiera informacje o typie dla obiektu, który może służyć do pobierania informacji o typie dla interfejsu.

(Odziedziczone po Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Pobiera informację o liczbie typów interfejsów, jakie zawiera obiekt (0 lub 1).

(Odziedziczone po Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Umożliwia dostęp do właściwości i metod udostępnianych przez obiekt.

(Odziedziczone po Attribute)

Dotyczy