Partilhar via


Como fazer: Mapear Hierarquias de Herança

Para implementar o mapeamento de herança no LINQ, deve especificar os atributos e propriedades de atributos na classe raiz da hierarquia de herança, conforme descrito nos passos seguintes. Os programadores que usam o Visual Studio podem usar o Object Relational Designer para mapear hierarquias de herança. Veja como: Configurar a herança usando o O/R Designer.

Observação

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

Para mapear uma hierarquia de herança

  1. Adicione o TableAttribute atributo à classe raiz.

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

  3. Para cada InheritanceMappingAttribute atributo, define-se uma Code propriedade.

    Esta propriedade contém um valor que aparece na tabela da base de dados na IsDiscriminator coluna para indicar a que classe ou subclasse pertence esta linha de dados.

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

    Esta propriedade detém um valor que especifica qual classe ou subclasse o valor-chave significa.

  5. Só num dos InheritanceMappingAttribute atributos, adiciona uma IsDefault propriedade.

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

  6. Adicione uma IsDiscriminator propriedade para um ColumnAttribute atributo.

    Esta propriedade indica que esta é a coluna que detém o Code valor.

Exemplo

Observação

Se estiveres a usar o Visual Studio, podes usar o Object Relational Designer para configurar a herança. Veja como: Configurar a herança usando o O/R Designer

No exemplo de código seguinte, Vehicle é definido como a classe raiz, e os passos anteriores foram implementados para descrever a hierarquia do 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