O/R インピーダンスミスマッチ クラス継承

[雑記] O/R インピーダンスミスマッチ(クラスの継承) (C# によるプログラミング入門)
http://ufcpp.net/study/csharp/sp3_ormismatch2.html
概要、クラスの継承構造、継承構造をRDBのテーブルで表す、LINQ to SQLにおける継承構造のO/Rマッピング

継承構造を RDB 上で表現するには、 型識別用の情報を格納した列(discriminator: discriminate は「区別・識別する」)を作ります。

LINQ to SQL では、継承構造をもつクラスに InheritanceMapping 属性をつけ、 discriminator にしたいプロパティの Column 属性に IsDiscriminator = true をつけます。

  [Table(Name = "Shape")]
  [InheritanceMapping(Code = "0", Type = typeof(Shape), IsDefault = true)]
  [InheritanceMapping(Code = "1", Type = typeof(Rectangle))]
  [InheritanceMapping(Code = "2", Type = typeof(Circle))]
  public class Shape
  {
    [Column(AutoSync = AutoSync.OnInsert, IsDbGenerated = true, IsPrimaryKey = true)]
    public int ID;

    [Column(IsDiscriminator = true)]
    public ShapeType Type;

    public virtual float GetArea() { return 0; }
  }

なるほど、継承するクラスにInheritanceMapping属性をつけて、メンバーのColumn属性にIsDiscriminator=trueをつける。
そうすれば、確かに継承構造が表せる。