【C#入門】初学者がASP.NETでWebアプリを作る：第1回

#概要
転職してC#で開発することになったものの、C#は触ったことがないので、練習として簡単にWebアプリを作っていきたいと思います。
やってみた結果、こうやったらできたよ、ではなく、やりながらやったことをそのまま書いていきたいと思います。
（最後まで読むと成長過程がわかる…きっと。）

#作るもの
・給与管理アプリケーション
会社が従業員の給与を管理するものではなく、従業員が自分の給与を管理するアプリを作っていきます。
毎月の給与や賞与の明細を登録、蓄積していきます。
データを見るところは、明細を確認するだけはアプリの機能として実装して、グラフとかで見えたらいいなと思うので、そこはBIツールを使う予定。
アプリの機能としては、下記3機能を持たせます。
1.アカウント管理
2.給与・賞与データ登録
3.給与・賞与データ参照

#使うもの
・Visual Studio 2019
　Community版を使います。
・ASP.NET Core
・Entity Framework
　PostgreSQLを使うのでNpgsqlを使います。
・IdentityASP.NET Core（アカウント認証はこれを使うとできるって聞いたけどほんとに使うか不明）
・PostgreSQL（あえてSQL Serverは使わない挑戦）

#プロジェクトを作る
Visual Studio 2019を起動し、新しいプロジェクトの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57278/7c1a6f61-3738-bebd-7924-a184a6a0289b.png)

ASP.NET Core Web アプリケーションを選択、次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57278/4a7b5b49-6b8a-c2df-9e4a-a25563ab03ef.png)

適当に入力して作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57278/5adfd869-98fd-5f9f-b51a-4dd35e7d0604.png)

Web アプリケーション（モデルビューコントローラー）を選択し作成
（認証のところを変更しておくかどうか迷ったけど一旦スルー、まずは登録機能だけ作り上げて、アカウント管理機能は後で作る。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57278/6f4132d0-888c-68f7-dc83-a9847dfd731a.png)

プロジェクトの作成完了。
#Npgsqlを導入する
プロジェクトを右クリックして、NuGetパッケージの管理を開き、
Npgsqlを検索、インストール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57278/fe0cd29f-dd72-0a8a-15ed-8e991f6e7d2e.png)

なんか聞かれるのでOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57278/754c9eab-d921-3ea5-956c-48363a6361ed.png)

エラーが出なければ完了。

#Modelを作る
参考文献：https://qiita.com/Kei18/items/1a9b936216bd2458ec08
まずはSalaryモデルを作っていきます。
ソリューションエクスプローラのModelsフォルダを右クリック→追加→新しい項目を選択、
クラスを選択して名前を記入し追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57278/8c662f15-887d-b2a3-9089-1c23ca4e7ee6.png)

下記のようなクラスにしました。

```C#:Salary.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace SalaryManagementSystem.Models
{
    public class Salary
    {
        // 受給者
        public string Beneficiary { get; set; }
        // タイプ（給与、賞与）
        public string PaymentType { get; set; }
        // 支給日
        public DateTime PaymentDate { get; set; }
        // 支給額
        public decimal PaymentAmount { get; set; }
        // 交通費
        public decimal TravelExpence { get; set; }
        // 健康保険料
        public decimal HealthInsurancePremium { get; set; }
        // 厚生年金料
        public decimal WelfarePension { get; set; }
        // 雇用保険料
        public decimal EmploymentInsurancePremium { get; set; }
        // 所得税
        public decimal IncomeTax { get; set; }
        // 住民税
        public decimal ResidentTax { get; set; }
        // 総支給
        public decimal TotalPaymentAmount { get; set; }
        // 時間外手当
        public decimal OvertimeAllowance { get; set; }
        // 深夜手当
        public decimal MidnightAllowance { get; set; }
        // 休日手当
        public decimal HolidayAllowance { get; set; }
        // 備考
        public string Remarks { get; set; }
        // 登録日時
        public DateTime RegisterDate { get; set; }
        // 登録ユーザID
        public string RegisterUser { get; set; }
        // 更新日時
        public DateTime UpdateDate { get; set; }
        // 更新ユーザID
        public string UpdateUser { get; set; }
    }
}
```

スキャフォールディング機能を使用するため、一度ビルドしておく。

#Controllerを作る
ソリューションエクスプローラのControllersを右クリック→追加→新規スキャフォールディングアイテムを選択
Entity Frameworkを使用した、ビューがあるMVCコントローラーを選択し追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57278/1f05339a-592a-9df4-c136-0483b5c776f9.png)
下記のように設定し追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57278/0cbc9c26-1617-11b9-8f0b-f4217717d787.png)
エラーになった
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57278/7bea5131-9d69-58d9-3f6a-f3524465bbfe.png)
どうやらIdという項目（自動的に主キーにする項目）がないといけないらしいので追加した。
エラー解消！

```C#:Salary.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace SalaryManagementSystem.Models
{
    public class Salary
    {
        // ID
        public int Id { get; set; }
        // 受給者
        public string Beneficiary { get; set; }
        // タイプ（給与、賞与）
        public string PaymentType { get; set; }
        // 支給日
        public DateTime PaymentDate { get; set; }
        // 支給額
        public decimal PaymentAmount { get; set; }
        // 交通費
        public decimal TravelExpence { get; set; }
        // 健康保険料
        public decimal HealthInsurancePremium { get; set; }
        // 厚生年金料
        public decimal WelfarePension { get; set; }
        // 雇用保険料
        public decimal EmploymentInsurancePremium { get; set; }
        // 所得税
        public decimal IncomeTax { get; set; }
        // 住民税
        public decimal ResidentTax { get; set; }
        // 総支給
        public decimal TotalPaymentAmount { get; set; }
        // 時間外手当
        public decimal OvertimeAllowance { get; set; }
        // 深夜手当
        public decimal MidnightAllowance { get; set; }
        // 休日手当
        public decimal HolidayAllowance { get; set; }
        // 備考
        public string Remarks { get; set; }
        // 登録日時
        public DateTime RegisterDate { get; set; }
        // 登録ユーザID
        public string RegisterUser { get; set; }
        // 更新日時
        public DateTime UpdateDate { get; set; }
        // 更新ユーザID
        public string UpdateUser { get; set; }
    }
}
```

#とりあえず実行してみる
画面上部のIIS Expressボタンを押下
証明書がどうとか聞かれるがOK的な方を選ぶ
自動的に開いたページのURL末尾に/Salariesを追加して開くと…エラー。
DBにアクセスできない的なエラー。そりゃDB作ってないからな。。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57278/c8e2f0ab-a83a-71cd-336d-1c4709fd7292.png)


#まとめ
・プロジェクトを作成した
・Modelクラスを作成した
・Controllerはスキャフォールディングで作成したがうまくいってない？？？

#次回予告
次回はスキャフォールディングでうまくいかなかった調査と、CRUDの作りこみをしていきます。