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
Adicione o TableAttribute atributo à classe raiz.
Também à classe raiz, adicione um InheritanceMappingAttribute atributo para cada classe na estrutura hierárquica.
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.
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.
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.
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