Procedura: eseguire il mapping di gerarchie di ereditarietàHow to: Map Inheritance Hierarchies

Per implementare il mapping di ereditarietà in LINQLINQ, è necessario specificare gli attributi e le relative proprietà sulla classe radice della gerarchia di ereditarietà, come descritto nei passaggi seguenti.To implement inheritance mapping in LINQLINQ, you must specify the attributes and attribute properties on the root class of the inheritance hierarchy as described in the following steps. Gli sviluppatori che usano Visual Studio è possono utilizzare il Object Relational DesignerObject Relational Designer per eseguire il mapping di gerarchie di ereditarietà.Developers using Visual Studio can use the Object Relational DesignerObject Relational Designer to map inheritance hierarchies. Vedere procedura: configurare l'ereditarietà tramite O/R Designer.See How to: Configure inheritance by using the O/R Designer.

Nota

Non sono richiesti attributi o proprietà speciali sulle sottoclassi.No special attributes or properties are required on the subclasses. Notare, in particolare, che le sottoclassi non dispongono dell'attributo TableAttribute.Note especially that subclasses do not have the TableAttribute attribute.

Per eseguire il mapping di una gerarchia di ereditarietàTo map an inheritance hierarchy

  1. Aggiungere l'attributo TableAttribute alla classe radice.Add the TableAttribute attribute to the root class.

  2. Aggiungere inoltre alla classe radice un attributo InheritanceMappingAttribute per ogni classe nella struttura gerarchica.Also to the root class, add an InheritanceMappingAttribute attribute for each class in the hierarchy structure.

  3. Per ogni attributo InheritanceMappingAttribute definire una proprietà Code.For each InheritanceMappingAttribute attribute, define a Code property.

    Questa proprietà contiene un valore che viene visualizzato nella colonna IsDiscriminator della tabella di database per indicare la classe o sottoclasse a cui appartiene questa riga di dati.This property holds a value that appears in the database table in the IsDiscriminator column to indicate which class or subclass this row of data belongs to.

  4. Per ogni attributo InheritanceMappingAttribute aggiungere inoltre una proprietà Type.For each InheritanceMappingAttribute attribute, also add a Type property.

    Questa proprietà contiene un valore che specifica a quale classe o sottoclasse corrisponde il valore della chiave.This property holds a value that specifies which class or subclass the key value signifies.

  5. Aggiungere una proprietà InheritanceMappingAttribute solo a uno degli attributi IsDefault.On only one of the InheritanceMappingAttribute attributes, add an IsDefault property.

    Questa proprietà viene utilizzata per definire un fallback mapping quando il valore discriminante dalla tabella di database non corrisponde a qualsiasi Code valore nei mapping di ereditarietà.This property serves to designate a fallback mapping when the discriminator value from the database table does not match any Code value in the inheritance mappings.

  6. Aggiungere una proprietà IsDiscriminator per un attributo ColumnAttribute.Add an IsDiscriminator property for a ColumnAttribute attribute.

    Questa proprietà indica che la colonna specificata contiene il valore Code.This property signifies that this is the column that holds the Code value.

EsempioExample

Nota

Se si utilizza Visual Studio, è possibile utilizzare il Object Relational DesignerObject Relational Designer per configurare l'ereditarietà.If you are using Visual Studio, you can use the Object Relational DesignerObject Relational Designer to configure inheritance. Vedere procedura: configurare l'ereditarietà tramite O/R DesignerSee How to: Configure inheritance by using the O/R Designer

Nell'esempio di codice seguente Vehicle viene definita come classe radice e i passaggi precedenti sono stati implementati per descrivere la gerarchia per LINQLINQ.In the following code example, Vehicle is defined as the root class, and the previous steps have been implemented to describe the hierarchy for LINQLINQ.

[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

Vedere ancheSee Also

Supporto dell'ereditarietàInheritance Support
Procedura: personalizzare classi di entità mediante l'Editor del codiceHow to: Customize Entity Classes by Using the Code Editor