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をつける。
そうすれば、確かに継承構造が表せる。