ASP.NET core MVCのワークフロー(初期)

ASP.NET Core MVC(SQL Server)で何か作るときの基本的なワークフローのメモ。スキャホールディングなし。

プロジェクト作成

visual studioで[ASP.NET Core Web App(Model-View-Controller)でプロジェクトを新規作成。.NETは今日なら7.0だな。

nuget

Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Tools

両方ともnuget

モデルを作る

Models/Domain/TestModel.csを作成。普通にクラスです。

namespace TestApp.Models.Domain
{
  public class TestModel
  {
    public Guid Id {get; set;}
    public string Name {get; set;}
    public string Description {get; set;}
    //もし*の関係を作るときは
    public ICollection<TestModel2> TestModel2s {get; set;}
    //とICollectionを使う
  }
}

DbContextクラスを作る

Data/TestAppDbContext.csを作成。普通にクラス。

namespace TestApp.Data
{
  public class TestAppDbContext : DbContext
  {
    //このコンストラクタは継承宣言のDbContextを右クリして、自動で生成させる
    public TestAppDbContext(DbContextOptions options) : base(options)
    {
    }
    public DbSet<BlogPost> TestModel { get; set; }  //以後はこのようにDbSetのプロパティを追加する
  }
}

appsettings.jsonにデータベースへの接続文字列を追加

SQLサーバーの種類によるが、接続文字列を追加。

  "AllowedHosts": "*",
  "ConnectionStrings": {
    "TestAppDbConnectionString": "Server=localhost\\SQLEXPRESS;Database=AppTestDb;Trusted_Connection=True;TrustServerCertificate=Yes"
    //LocalDbの場合、Server=(localdb)\\mssqllocaldb
    //Database等は自分の好きな名前で
  }

DbContextをインジェクション

program.csに以下を追記。

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<TestAppDbContext>(options =>
	options.UseSqlServer(builder.Configuration.GetConnectionString("TestAppDbConnectionString"))
);

データベースのマイグレーション、アップデート

パッケージマネージャーコンソールで以下を入力

PM>add-migration "(マイグレーション名)"
PM>update-database

これで成功していればデータベースにAppTestDb、テーブルにTestModelが出来ている。

テーブルを増やすとき

Modelを作成 -> DataContextにDbSet<Model>を追記 -> データベースのマイグレーション -> データベースのアップデート の流れでOK。