Partager via


Procédure : mapper des hiérarchies d'héritage (LINQ to SQL)

Mise à jour : November 2007

Pour implémenter un mappage d'héritage dans LINQ, vous devez spécifier les attributs et les propriétés d'attribut sur la classe racine de la hiérarchie d'héritage, comme décrit dans les étapes suivantes. Les développeurs qui utilisent Visual Studio peuvent également utiliser le Concepteur Objet/Relationnel pour mapper des hiérarchies d'héritage.

Remarque :

Les sous-classes ne requièrent pas de propriétés ni d'attributs spéciaux. Notez surtout que les sous-classes n'ont pas l'attribut TableAttribute.

Pour mapper une hiérarchie d'héritage

  1. Ajoutez l'attribut TableAttribute à la classe racine.

  2. Ajoutez-lui également un attribut InheritanceMappingAttribute pour chaque classe dans la structure hiérarchique.

  3. Pour chaque attribut InheritanceMappingAttribute, définissez une propriété Code.

    Cette propriété contient une valeur qui apparaît dans la table de base de données dans la colonne IsDiscriminator pour indiquer à quelle classe ou sous-classe appartient cette ligne de données.

  4. Pour chaque attribut InheritanceMappingAttribute, ajoutez également une propriété Type.

    Cette propriété contient une valeur qui spécifie la classe ou la sous-classe que la valeur de clé désigne.

  5. Ajoutez une propriété IsDefault à un seul des attributs InheritanceMappingAttribute.

    Cette propriété sert à désigner un mappage de secours lorsque la valeur de discriminateur de la table de base de données ne correspond à aucune valeur Code dans les mappages d'héritage.

  6. Ajoutez une propriété IsDiscriminator pour un attribut ColumnAttribute.

    Cette propriété signifie qu'il s'agit de la colonne qui contient la valeur Code.

Exemple

Remarque :

Si vous utilisez Visual Studio, vous pouvez configurer l'héritage à l'aide du Concepteur Objet/Relationnel.

Dans l'exemple de code suivant, Vehicle est défini comme classe racine. Les étapes précédentes ont été implémentées pour décrire la hiérarchie de LINQ. L'illustration suivante présente les relations.

Diagramme d'héritage

<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
[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;
}

Voir aussi

Concepts

Prise en charge de l'héritage (LINQ to SQL)

Autres ressources

Procédure : personnaliser des classes d'entité à l'aide de l'éditeur de code (LINQ to SQL)