ログイン情報をSQLiteで管理

プロジェクトの作成

  • VS2022
  • ASP.NET Core Webアプリ(MVC)
  • .NET 7.0
  • 認証:個別のアカウント

NuGetでSQLiteを扱えるようにする

Microsoft.EntityFrameworkCore.Sqlite を検索してインストール

参考:記事時点では ver 7.0.13


ソース変更

options.UseSqlServerを options.UseSQLiteに変更する

Program.cs

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection") ?? throw new InvalidOperationException("Connection string 'DefaultConnection' not found.");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlite(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();

接続文字列の設定を変更

appsettings.json

  "ConnectionStrings": {
    "DefaultConnection": "Data Source=Identity.db"
  },

※ファイル名はお好みの名前をつけてください。


DB作成

パッケージマネージャーコンソールを起動し、以下を実行

PM> Update-Database

いろいろとエラーがでます。

…
Failed executing DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
CREATE TABLE "AspNetRoles" (
    "Id" nvarchar(450) NOT NULL CONSTRAINT "PK_AspNetRoles" PRIMARY KEY,
    "Name" nvarchar(256) NULL,
    "NormalizedName" nvarchar(256) NULL,
    "ConcurrencyStamp" nvarchar(max) NULL
);
…
SQLite Error 1: 'near "max": syntax error'.
…

SQLiteだとnvachar(max)というのが変換できないとのことで他DBに移植する可能性があるならコメントアウト不要なら削除してください。

./Data/Migrations/00000000000000_CreateIdentitySchema.Designer.cs

 b.Property<string>("ConcurrencyStamp")
    .IsConcurrencyToken()
    .HasColumnType("nvarchar(max)");

b.Property<string>("ConcurrencyStamp")
    .IsConcurrencyToken();
    //.HasColumnType("nvarchar(max)");

同ファイル内の他もすべて同じ対応をします。

あらためて、Update-Databaseを行います。

アプリケーションのフォルダ直下に identity.dbが作られます。