見出し画像

Microsft learnのASP.NET CoreでRazor Pages Webアプリを作成するチュートリアルをやってみた ~モデル作成・スキャフォールディング

経緯

普段の業務でもっと楽したいな~と思い昔取った杵柄でWEBシステムでも構築してみようと基礎から学びなおししてます
自分自身の備忘録として書いているだけなので内容はとりとめもないことばかりですがご容赦ください

開発環境

  • Windows11+SQLServer

  • VisualStudio2022 Community


モデルの作成

  • 「ソリューションエクスプローラー」→「プロジェクト名」を右クリック→「追加」-「新しいフォルダー」

  • フォルダ名を「Models」にして作成します。

  • 「Models」フォルダを右クリック→「追加」-「クラス」

  • ファイル名を「Movie」にして作成します。

Movieクラス

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace RazorPagesMovie.Models
{
    public class Movie
    {
        public int Id { get; set; }
        public string Title { get; set; } = string.Empty;
        [Display(Name ="Release Date")]
        [DataType(DataType.Date)]
        public DateTime ReleaseDate { get; set; }
        public string Genre { get; set; } = string.Empty;
        [Column(TypeName = "decimal(18,2)")]
        public decimal Price {  get; set; }
    }
}

※自分の覚書
1. string? の意味

string?は、null許容型の文字列型を表します。これは、変数が null 値または文字列値のいずれかを保持できることを意味します。

従来の string 型とは異なり、string? 型は、変数が初期化されていない場合や、明示的に null に設定された場合に、エラーをスローしません。これは、null許容型が、データの欠如や不確実性をより適切に処理できるように設計されているためです。

string? 型を使用する主な利点は以下の通りです。

  • null 許容性: 変数が null である可能性を明示的に示すことができ、ランタイムエラーを防ぐことができます。

  • コードの簡潔性: Nullable 型を使用することで、null チェックのコードを削減できます。

  • 静的型付け: コンパイラは、変数が null または文字列値のいずれかを保持できることを認識し、それに応じて型検査を行います。

一方、string? 型を使用する際の注意点は以下の通りです。

  • パフォーマンス: string? 型は、従来の string 型よりも若干オーバーヘッドが大きくなります。

  • 互換性: 古いライブラリや API は、string? 型をサポートしていない場合があります。

2. string.Empty について

string.Empty は、長さ0の空文字列を表す静的フィールドです。これは、"" と同じ値を持ちますが、いくつかの点で異なります。

  • パフォーマンス: string.Empty は、""よりもパフォーマンスが優れている場合があります。これは、string.Empty が CLR によって共有される単一のインスタンスであるのに対し、"" は毎回新しいインスタンスが作成されるためです。

  • 明瞭性: コード内で空文字列を明示的に示すために string.Empty を使用すると、可読性が向上します。

サンプルコード

string name = string.Empty;

if (string.IsNullOrEmpty(input))
{
  name = string.Empty;
}

3.decimalについて

decimal型は、10進固定小数点数型であり、財務計算や通貨処理など、高い精度が求められる場面で広く使用されます。

主な特徴は以下の通りです。

  • 精度: 最大29桁の有効数字を保持でき、double型 (15~17桁) やfloat型 (7桁) よりも高い精度を実現します。

  • 丸め誤差がない: 10進数で内部表現されるため、小数点以下の計算でも丸め誤差が発生せず、常に正確な値を保持できます。

  • 財務計算に最適: 通貨や金利など、小数点以下の計算が重要な財務計算に適しています。

  • 通貨型として利用可能: System.Globalization 名前空間の CurrencyInfo クラスと組み合わせて、通貨の書式設定や変換を行うことができます。

モデルのスキャフォールディング

  • Pagesフォルダ内に「Movies」フォルダを作成する

  • 「Movies」フォルダを右クリック→「追加」-「新規スキャフォールディングアイテム」をクリック

  • 「Entity Framework を使用する Razor Pages (CRUD)」を追加


初期データベーススキーマの作成

プロジェクトマネージャーコンソール(PMC)で次のコマンドをたたきます

Add-Migration InitialCreate
Update-Database

Add-Migration 文字列

で「Migrations」フォルダにマイグレーションファイルが作成されます。

Update-Database

でデータベースの変更内容が反映されます。

データベースのアップデートが終わると「Data」フォルダ内のRazorPagesMovieContext.csにDbsetが追加されます。

namespace RazorPagesMovie.Data
{
    public class RazorPagesMovieContext : DbContext
    {
        public RazorPagesMovieContext (DbContextOptions<RazorPagesMovieContext> options)
            : base(options)
        {
        }

        public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; } = default!;
    }
}

この状態で動作確認のためデバッグの実行をすると以下の画面の出来上がり


ちなみにデータが入っているのはシードデータ用のクラスを作っておいたのでデータが入っている状態です。
詳細は下記リンクを見てください

まだまだ、私も理解できてない部分が多いですがやはり物を作るのって楽しいんですよね。
本業の方ではユーザー認証機能やチャット機能を作ったりと少しづつやれることが増えてきました。
次回は検索機能の追加をやってみようと思います。

この記事が気に入ったらサポートをしてみませんか?