EntityFramwork -> 外部キー

Posted by muchag | C# |
初回投稿:2018-01-22 (月) 20:15:17 | 最終更新:2018-01-26 (金) 12:20:09

【環境】
Visual C#: 15.5.4(2017)
単一
自動

php フレームワークみたいに、
命名規則を守って記述すれば
自動で外部キー設定をしてもらえる。


public class Municipality
{
    [Key]
    [MaxLength(6)]
    public string Code { get; set; }

    [MaxLength(5)]
    public string PrefectureCode { get; set; }

    public Prefecture Prefecture { get; set; } // 追加分
}

こちらは、参考サイトのものを一部頂戴してきたソース。

手動

命名規則からハズレた場合には
手動で外部キーを設定してやる。


public class Municipality
{
    [Key]
    [MaxLength(6)]
    public string Code { get; set; }

    [MaxLength(5)]
    public string PCD { get; set; } // これを変更

    [ForeignKey("PCD")]
    public Prefecture Prefecture { get; set; } // ナビゲーションプロパティ
}

こちらも参考サイトのものを一部頂戴。

Eager-loding, Lazy-loading

おそらく、この先で Eager-loding, Lazy-loading の勉強をする必要があると思う。

複合キー

外部キー
参考スライドの通り


[Key]
[Column(Order=1)]
public string Value1 { get; set; }

[Key]
[Column(Order=2)]
public string Value2 { get; set; }

としたところ、Add-Migration で、下記エラーが出た。

Entity type ‘HogeEntity’ has composite primary key defined with data annotations. To set composite primary key, use fluent API.

そこで、参考サイトのように、Entity でのキー設定をやめ
DbContext 側で設定したところ、設定できた。


protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity()
        .HasKey(paidHoliday => new { HogeEntity.Value1, HogeEntity.Value2 });
}
参考サイト

Qiita:[EntityFrameworkCore]CodeFirstでテーブルに複合主キーを付ける(2017-08-31)
→参考スライドの [Column(Order=1)] では設定できなかったので、大変助かりました

利用

上記のように設定しておけば、Join しなくても
オブジェクトチェーンで取得可能。
Municipality.Code
Municipality.Prefecture.Code

参考サイト

インクリメンタルなカイハツにっき
実践 Entity Framework ~ 外部キーを設定する(2015-07-28)
実践 Entity Framework ~ ForeignKey 属性(2015-08-03)

Posted by muchag | C# |
初回投稿:2018-01-22 (月) 20:15:17 | 最終更新:2018-01-26 (金) 12:20:09

コメントはまだありません »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment