DB 外部キー制約【C# WPF】

外部キーの書き方は2パターンありますが、1つだけ覚えればOKです。

    public class Receipt
    {
        [Key]
        public int Id { get; set; }

        public int PaidFor { get; set; }
        [ForeignKey("PaidFor")]
        public virtual Category PaidForCategory { get; set; }
    }
    public class Category
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }
    }

まず外部キー制約を課すカラムを作ります。
そして外部キーに設定したいclassオブジェクトを対象テーブルのカラムにvirtualで書きます。
そしてvirtualカラムの上に[ForeignKey(“hogehoge”)]とそのインスタンスを紐付けたい(外部キー制約を課したい)カラム名を指定します。
これだけでOK.

ちなみ同一のテーブルから2つ以上の外部キー制約を課したい場合には少し注意が必要です。
上のやり方で2種類書くと循環参照です!と怒られます。

片方または両方をNull許可すれば一応通ります。が、これでは外部キー制約を課したい要望を満たさないかもしれませんのでご注意ください。

    public class Receipt
    {
        [Key]
        public int Id { get; set; }

        public int PaidFor { get; set; }
        [ForeignKey("PaidFor")]
        public virtual Category PaidForCategory { get; set; }

        public int? PaidFrom { get; set; }
        [ForeignKey("PaidFrom")]
        public virtual Category PaidFromCategory { get; set; }
    }

コメント