Partilhar via


Como: Mapear hierarquias de herança

Para implementar o mapeamento de herança no LINQ, você deve especificar os atributos e as propriedades de atributos na classe raiz da hierarquia de herança, conforme descrito nas etapas a seguir. Os desenvolvedores que usam o Visual Studio podem usar o Object Relational Designer para mapear hierarquias de herança. Consulte Como configurar a herança usando o O/R Designer.

Nota

Não são necessários atributos ou propriedades especiais nas subclasses. Observe especialmente que as subclasses não têm o TableAttribute atributo.

Para mapear uma hierarquia de herança

  1. Adicione o TableAttribute atributo à classe raiz.

  2. Também à classe raiz, adicione um InheritanceMappingAttribute atributo para cada classe na estrutura hierárquica.

  3. Para cada InheritanceMappingAttribute atributo, defina uma Code propriedade.

    Essa propriedade contém um valor que aparece na tabela do banco de dados na IsDiscriminator coluna para indicar a qual classe ou subclasse essa linha de dados pertence.

  4. Para cada InheritanceMappingAttribute atributo, adicione também uma Type propriedade.

    Essa propriedade contém um valor que especifica qual classe ou subclasse o valor da chave significa.

  5. Em apenas um dos InheritanceMappingAttribute atributos, adicione uma IsDefault propriedade.

    Essa propriedade serve para designar um mapeamento de fallback quando o valor do discriminador da tabela do banco de dados não corresponde a nenhum Code valor nos mapeamentos de herança.

  6. Adicione uma IsDiscriminator propriedade para um ColumnAttribute atributo.

    Esta propriedade significa que esta é a coluna que contém o Code valor.

Exemplo

Nota

Se você estiver usando o Visual Studio, você pode usar o Object Relational Designer para configurar a herança. Consulte Como configurar a herança usando o O/R Designer

No exemplo de código a seguir, Vehicle é definida como a classe raiz e as etapas anteriores foram implementadas para descrever a hierarquia para 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

Consulte também