Welcome

首页 / 软件开发 / LINQ / Linq to SQL中的实体继承

Linq to SQL中的实体继承2011-08-04 博客园 紫色阴影现在的Linq To Sql只支持单表继承,不支持一实体一具体表和一实体一扩展表等方式继承。什么是单 表继承呢?所谓单表继承就是把整个继承体系存储在数据库的一个表中。由此可以知道,这个表结构包括 所有实体的属性字段,如果在该继承体系中,实体的数量较多,就会产生大量的null值的数据,这样浪费 了很多的数据存储空间。不过所有的继承体系放在一个表中,逻辑简单容易操作,数据量不大的时候效率 也高。下面看看在Linq To Sql中是怎样实现单表继承的(用Orcas白皮书中的示例来说明)。

假如现在有这样一张表Vehicle,表结构如下:

它表示了三个实体:

Vehicle--基类,包含字段VIN、Key、MfgPlant

Car--Vehicle的派生类,扩展字段TrimCode、ModelName

Truck--Vehicle的派生类,扩展字段Tonnage、Axles

其中Key是用来标志该行是表示什么类型的实体,如果该行表示Vehicle,则值为"V",如果表示Car,值 为"C"。

下面的示例表示该继承体系是怎样映射到数据库的表Vehicle中的(这里使用Column Attribute映射字 段)

[Table]
[InheritanceMapping(Code = "V", Type = typeof(Vehicle),
IsDefault=true)]
[InheritanceMapping(Code = "C", Type = typeof(Car))]
[InheritanceMapping(Code = "T", Type = typeof(Truck))]
public class Vehicle
{
[Column(IsDiscriminator = true)]
public string Key;
[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;
}