EntityFrameworkならプロジェクト作成後30秒でデータ表示ができるんだよ【C#】


# 事前準備

- データベースの用意
    - SQLServerを使用します  
      サーバー名：MYCOMPUTER  
     ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200743/4ebb4b5a-54b5-dd55-dda5-31dc2bc2100b.png)


- プロジェクトの作成
    - WindowsFormアプリケーション
    - VisualStudio2019Communitty
    - .NetFramework4.7.2 
 
      ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200743/f0626a36-50f6-fb2c-24a7-34fb7f1e6a28.png)

# 本題

以下の順序で説明します。  

- 1. NuGetでEntityFrameworkCoreを取得
- 2. EntityFrameworkCore付属のツールでDBモデルの自動生成
- 3. DB接続&データ取得及びデータ表示

# 最終結果
VIEW「v_users」のデータを全件取得・表示する。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200743/b6ae09d3-7e54-49ce-fc31-1ef494d1292b.png)

## NuGetで「EntityFrameworkCore」をインストール（１０秒）  

「NuGetパッケージの管理」の「参照」タブに「EntityFrameworkCore」と入力して「インストール」を押下。  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200743/7329c3d1-3ca3-8311-f7ac-b71ea64dc083.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200743/ba4b0413-7835-4384-4909-2c5308f271a2.png)

※「出力」ウィンドウのログがおとなしくなるまで待機  

## DBモデル(Entity?)の自動生成（１０秒）

適当なフォルダを作成して右クリック→「新しい項目」「データ」「ADO.NET Entity DataModel」を選択。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200743/6d3651f1-ec29-a178-b35a-bbbea015d205.png)

データベースからEF Designerを選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200743/a92b9402-5804-9c68-c572-890e13897c35.png)

サーバ名にSQLServer名を入力→データベースを指定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200743/3234bee3-5338-4258-f217-9e115dc6dd2d.png)

全テーブル＆全ビューを指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200743/885520bf-6932-fbcc-155b-073d7c207eda.png)

各テーブルのモデルが自動生成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200743/43366c0e-e383-a64e-ed74-a0c8fcb6a6b1.png)

## フォームのDBDataGridに表示（10秒）

Form1のLoadイベントにリスト取得用コードを記載

```c#
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        using(var db = new onceEntities())
        {
            // VIEW(v_users)全件をリスト型でDataSourceに設定
            dataGridView1.DataSource = db.v_users.ToList();
        }
    }
}
```

実行。ね？簡単でしょ？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200743/b6ae09d3-7e54-49ce-fc31-1ef494d1292b.png)

以上です

# ちなみに・・・
Entityのプロパティ名であれこれできます。

```c#
private void Form1_Load(object sender, EventArgs e)
{
    using(var db = new onceEntities())
    {
        // VIEW(v_users)全件をリスト型でDataSourceに設定
        dataGridView1.DataSource = db.v_users
                                        .Where(s => 1 < s.id )  // IDが１より大きい
                                        .Select(s => new { s.id 
                                                            , s.last_name
                                                            , s.first_name
                                                            , s.value })// 射影（？）
                                        .OrderByDescending(s => s.id)   // IDの降順
                                        .ToList();
    }
}
```

たった数行！直観的！  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200743/ba74aec2-7dd7-b821-3a23-81e56ca8d1fc.png)

他にも同様のコード量でInsert, Update, Deleteできます。  

# 使用しました

- 疑似個人情報ジェネレーター  
https://hogehoge.tk/personal/generator/

# おわりに

３０秒でできたよね。
EntityFrameworkをもっと業務で利用していきたいという思いで書きました。  
読んでいただきありがとうございました。

※今回、EntityFrameworkのデータベースファーストという方式で記事を書きました。  

以上