LoginSignup
13
17

More than 5 years have passed since last update.

Entity Frameworkのモデルファーストのちょいテク

Posted at

昨日、早く言えよ、と言われたちょいテク。

その1

Entity Frameworkのモデルファーストは、クラス自体がデータベースのテーブルになります。
テーブルには必ず共通した、Date情報をいれたいと思います。こういう時は、クラスの継承を使うといいです。

filename

    public class BaseModel
    {
        public DateTime Reg_Date { get; set; }
        public DateTime Upd_Date { get; set; }
        public bool IsActive { get; set; }
        public string Tag { get; set; }
        public void SetDate()
        {
            this.Reg_Date = DateTime.Now;
            this.Upd_Date = DateTime.Now;
            this.IsActive = true;
        }
    }

こんな感じのクラスを作って

filename

    public class User:BaseModel
    {
        public int UserId { get; set; }
        public string UserName { get; set; }
    }

こんな感じに継承を使う。そうすると、継承元のプロパティもテーブルに加わります。
多くのテーブルを作るとき、効果を発揮します。
一つ一つコピペするのも面倒ですしね。(継承自体がコピペをしないようにする技術だw)
新規の列追加の時も、new した後、SetDate()をすれば、面倒な初期値入力から開放されます。楽ちん。

その2

MVCでの開発の場合、データの処理は、Mのモデルに全部やらせるのが正しいはずです。
問い合わせ方があちこちに散らばるのはよくありません。
しかし、テーブル自体を直接拡張することはできません。
そうなので、こういう拡張メソッドを作るといいかんじです。

filename
    public static class UserExtend
    {
        public static IEnumerable<User> GetByUserName(this DbSet<User> list,string userName)
        {
            return list.Where(n => n.UserName == userName);
        }
    }

メソッドチェーンを辿っていくだけで欲しいものが取れるようになります。
テーブルの定義したクラスと同じ所に書いておくと便利でしょう。
使うときは、必ずUsingの設定を忘れないようにしましょう。

13
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
17