1. 前回のあらすじ
Identity をカスタマイズすることでメールアドレス認証だったのがユーザ名認証になり、ログイン後の表示がユーザ名になりました。また、パスワードの制約を緩くするため、Configureメソッドを修正しました。
2. 今回の目標
文献管理システムなので文献を保管しておくためのデータベースが必要です。なので、今回は文献を保管できるようなデータベースを新しく生成します。データベースは Model にて要素を定義し、dotnet コマンドを用いることで自動で生成してくれます。データベースの動作まで確認するので、ほぼ完成に近い状態になります。
3. データベースモデルの作成
データベースの要素になる部分をモデルとして生成します。ソリューションエクスプローラーの Model を右クリックして新しくクラスを追加します。名前は Books.cs にしました。
public class Books の括弧で囲まれた部分に文献に関する情報を定義していきます。個人的に文献といえば、タイトル・著者・出版社などが思いつくので、これらをコーディングしていきます。注意すべきなのはデータベースの ID を必ず含めることです。ID は登録した順番にナンバリングされていくので必ず入れてください。ID は数値を扱うので int型です。他は文字を扱うので string型でいいです。
//省略 public class Books { public int Id { get; set; } //データベースのキーID public string タイトル { get; set; } //文献タイトル public string 著者 { get; set; } //文献の著者 public string 出版社 { get; set; } //文献の出版社 [DataType(DataType.Date)] public DateTime 発行日 { get; set; } //文献の発行日 public string 分野 { get; set; } //文献の分類 public string リンク { get; set; } //文献のリンク先 }
もし、発行日 (日付) データを保存しておきたい場合はアノテーションを指定します。その際、Usingディレクティブが必要になるので追加してください。
これでデータベースのカラム部分が定義できました。文献を登録していけば、この内容でレコードが追加されます。
4. 文献管理のためのMVCスキャフォールディングを作成
Identity の VIew を生成するときもスキャフォールディングを使用しましたが、ここでもスキャフォールディングを生成します。Identity と比べると MVC が表記されているほどの違いです。 Model-View-Controller を自動で生成してくれる機能なのは Identity と変わりありませんが、認証専用か自作用かの違い程度だと思います。
ソリューションエクスプローラーの Controller で右クリックして スキャフォールディングを追加します。
MVC Controller を追加します。
そして Model Class と Data context Class を次のような内容にして追加します。
問題なければ BooksController.cs が生成されています。これが文献管理に関する制御を行うものです。ソースコードを上から読んでいくと、Createメソッド、Editメソッド、Deleteメソッドなどが確認できます。これらがデータベースに対する操作を制御するものです。
5. データベースへの適用と更新
データベースを使用する準備ができたので、スキャフォールディングをもとに文献管理用のデータベースを生成します。Identity の時と同じように powershell を用います。ソリューションエクスプローラーのプロジェクトディレクトリを右クリックし、ファイルエクスプローラーで開くをクリックします。ディレクトリ階層の表示欄に "powershell" と入力して起動します。
データベースを移行するコマンドを入力します。add の右には migration に登録する名前を入力します。分かりやすい名前であれば自由です。
データベースが2つ以上ある場合、 --context オプションを付けないとどのデータベースを移行するのかが分からないので、移行するほうを記述します。Data Context の名前はソリューションエクスプローラーの Data ディレクトリに入っています。確認してみてください。ちなみに、Identity を移行したい場合は "ApplicationDbContext" というファイル名を入力します。このとき、拡張子は入力する必要はありません。
ここでいう移行はスキャフォールディングをデータベースに移すという意味です。
dotnet ef migrations add BooksDatabase --context BooksDbContext
次に、データベースを更新するコマンドを入力します。--context オプションを忘れないでください。
dotnet ef database update --context BooksDbContext
画像のように "Done" が表示されれば完了です。よく見ると、Modelで設定したデータベースのカラムが日本語で表記されています。つまり、テーブルを作成するコマンドもすべて dotnet コマンドでやってくれたことになります。なんて便利なのでしょう!
これで文献管理データベースが生成されました。実際に動かしてみましょう。
文献一覧へ飛ぶリンクをまだ作っていないので、URLに直接記入します。http://IPアドレス:ポート番号/Books
動きましたね!!やったぜ!
6. 文献の登録・編集・削除
動いたところで、実際に文献を登録して遊んでみます。
6.1 文献の登録
"Create New" をクリックして入力フォームに飛びます。
必要事項を入力して登録してみてください。うまくいけばこんな感じになります。
無事に登録できましたね。
6.2 文献の編集
表の右側にある "Edit" をクリックして好きにいじってみます。
できたら "Save" をクリックして保存します。更新されていることを確認してください。
6.3 文献の概要
なんと、概要もみることができます。概要は "Details" をクリックします。
編集するか戻るかも選べますね。
6.4 データテーブルの確認
削除と行きたいところですが、いい機会なのでデータベースの中を見てみたいと思います。アプリを起動したままでいいので、Visual Studioに戻ります。画面上部の View (表示) から SQL Server Object Explorer を開きます。
localdb 内の BooksDbContext > Tables > dbo.Books を右クリックして View Data (ビューの表示) をクリックしてみてください。私の場合は他にもプロジェクトを作っているのでデータベースがたくさんありますが、初めての人は 2つか3つくらいだと思います。頑張って探してください。
登録された文献のデータが表示されていることが分かります。
確認できたら、今度は登録されているユーザ情報を確認してみます。今度は aspnet-WebApplication1 > Tables > dbo.AspNetUsers のビューを表示してみてください。
※私の場合は WebApplication1 という名前になっていますが、これはプロジェクト名が入ります。なぜなら Identity を登録する際、デフォルトの名前 (つまりはプロジェクト名) が採用されるためです。プロジェクト名を自分で作った場合はその名前で探してみてください。うまく表示されればこんな感じです。
パスワードがハッシュ化されていることも分かりますね。
データベースが正常に動いていれば、View で変更した際に更新されていきます。動作確認のためにも、時々見てみると良いかもしれません。
6.5 文献の削除
文献一覧に戻り、"Delete" をクリックします。
削除確認画面に飛ぶので、Delete をクリックすれば削除できます。確認してみてください。
問題なければ削除されています。
データベースのテーブルも確認してみましょう。更新ボタンを押してみてください。
するとテーブルから削除されていることが確認できます。
ここまでで、文献管理の操作すべてを確認できました。
7. まとめ
Model にてデータベースの要素を宣言し、スキャフォールディングを用いてデータベースの型を作りました。そして dotnet migration でスキャフォールディングをデータベースに移行、update で更新することで、文献管理用のデータベースを構築することができました。実際に動作確認も行い、正常に動作していることがわかりました。長くなりましたが、ここまでくればほぼ完成です。
次回はログインページへの遷移と文献一覧ページへのリンクを実装していきます。
ひとまず、お疲れさまでした!