Como: mapear hierarquias de herança
Para implementar o mapeamento de herança no LINQ, será necessário especificar os atributos e as propriedades de atributo na classe raiz da hierarquia de herança conforme descrito nas etapas a seguir. Desenvolvedores que utilizam o Visual Studio poderão usar o Object Relational Designer para mapear as hierarquias de herança. Consulte Como configurar a herança usando o Object Relational Designer.
Observação
Qualquer atributo ou propriedade de especial são necessários nas subclasses. Observe que as subclasses especialmente não têm o atributo de TableAttribute .
Para mapear uma hierarquia de herança
Adicione o atributo de TableAttribute a classe raiz.
Também à classe raiz, adicione um atributo de InheritanceMappingAttribute para cada classe na estrutura da hierarquia.
Para cada atributo de InheritanceMappingAttribute , defina uma propriedade de Code .
Esta propriedade contém um valor que pareça na tabela de base de dados na coluna de IsDiscriminator para indicar que a classe ou da subclasse esta linha de dados pertencem.
Para cada atributo de InheritanceMappingAttribute , também adicionar uma propriedade de Type .
Esta propriedade contém um valor que especifica que a classe ou da subclasse o valor da chave significa.
Em apenas um dos atributos de InheritanceMappingAttribute , adicione uma propriedade de IsDefault .
Essa propriedade serve para designar um mapeamento de fallback quando o valor discriminador da tabela do banco de dados não corresponder a nenhum valor de Code nos mapeamentos de herança.
Adicione uma propriedade de IsDiscriminator para um atributo de ColumnAttribute .
Esta propriedade significa que esta é a coluna que contém o valor de Code .
Exemplo
Observação
Se estiver usando o Visual Studio, poderá usar o Object Relational Designer para configurar a herança. Consulte Como configurar a herança usando o Object Relational Designer
No exemplo de código a seguir, Vehicle
é definido 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