Cómo: Asignar jerarquías de herencia (LINQ to SQL)

Actualización: November 2007

Para implementar la asignación de herencia en LINQ, debe especificar los atributos y las propiedades de atributo en la clase raíz de la jerarquía de herencia, tal como se describe en los pasos siguientes. Los desarrolladores de Visual Studio también pueden utilizar el Diseñador relacional de objetos para asignar jerarquías de herencia.

Nota:

No se requieren atributos o propiedades especiales en las subclases. Observe sobre todo que las subclases no tienen el atributo TableAttribute.

Para asignar una jerarquía de herencia

  1. Agregue el atributo TableAttribute a la clase raíz.

  2. También en la clase raíz, agregue un atributo InheritanceMappingAttribute para cada clase de la estructura jerárquica.

  3. Para cada atributo InheritanceMappingAttribute, defina una propiedad Code.

    Esta propiedad contiene un valor que aparece en la tabla de base de datos, en la columna IsDiscriminator, para indicar a qué clase o subclase pertenece esta fila de datos.

  4. Para cada atributo InheritanceMappingAttribute, agregue también una propiedad Type.

    Esta propiedad contiene un valor que especifica a qué clase o subclases representa el valor de clave.

  5. En uno de los atributos InheritanceMappingAttribute, agregue una propiedad IsDefault.

    Esta propiedad sirve para designar una asignación de reserva cuando el valor de discriminador de la tabla de base de datos no coincide con ningún valor Code de las asignaciones de herencia.

  6. Agregue una propiedad IsDiscriminator para un atributo ColumnAttribute.

    Esta propiedad indica que ésta es la columna que contiene el valor Code.

Ejemplo

Nota:

Si utiliza Visual Studio, puede usar el Diseñador relacional de objetos para configurar la herencia.

En el ejemplo de código siguiente, Vehicle se define como la clase raíz y se han implementado los pasos anteriores para describir la jerarquía para LINQ. En la ilustración siguiente se muestran las relaciones.

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

Vea también

Conceptos

Compatibilidad con la herencia (LINQ to SQL)

Otros recursos

Cómo: Personalizar clases de entidad mediante el editor de código (LINQ to SQL)