ログイン情報をSQLiteで管理
プロジェクトの作成
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が作られます。