はじめに
以前、Blazor(Hosted)とSQL ServerをつかってTodoチュートリアルをやった
SQLite版(かつ.NET5にダウングレード)した際に、APIをつかってデータを取得するところでつまづいたので、メモとして残す
何が起きたのか
以前と同様にapi/TodoItems
へGET
でアクセスして、アイテムを取得しようとしたら接続できず
直接そのURLにアクセスしたときのスクリーンショットは以下のとおり
GitHubのISSUEを検索
エラーメッセージがタイトルのISSUEを発見
SQLitePCLRaw.bundle_e_sqlite3をインストールしたら直ったという投稿あり
NuGetでSQLitePCLRaw.bundle_e_sqlite3
をインストールする
インストール後のパッケージ一覧は以下のとおり
PM> dotnet list package
[net5.0]:
最上位レベル パッケージ 要求済み 解決済み
> Microsoft.AspNetCore.Components.WebAssembly.Server 5.0.16 5.0.16
> Microsoft.EntityFrameworkCore 5.0.16 5.0.16
> Microsoft.EntityFrameworkCore.Sqlite.Core 5.0.16 5.0.16
> Microsoft.EntityFrameworkCore.SqlServer 5.0.16 5.0.16
> Microsoft.EntityFrameworkCore.Tools 5.0.16 5.0.16
> Microsoft.VisualStudio.Web.CodeGeneration.Design 5.0.2 5.0.2
> SQLitePCLRaw.bundle_e_sqlite3 2.0.7 2.0.7
1番下にパッケージが追加された
(コントローラーのスキャフォールディングをする際にSqlServer
が勝手にインストールされた模様)
動作確認
うごいた!
(右はDB Browser for SQLiteの画面)
おまけ
せっかくなので、.NET6+SQLServerからSQLite版にした際の変更箇所をメモしておく
Startup.cs
とappsettings.json
の変更点
DBコンテキストのサービス登録を、UseSqlite
に変更する
ただし、.NET6からトップレベルステートメントとやらで記述の仕方が結構違うので注意する
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<Context.TodoDbContext>(
options => options.UseSqlite(Configuration.GetConnectionString("DefaultConnection")));
}
appsettings.json
はSQLServerに比べてとても短い
"ConnectionStrings": {
"DefaultConnection": "Data Source=TodoDb.db"
},
EF Core データベースの扱い
EFCoreのコマンドを打つだけで、.db
ファイルが生成される
PM> Add-Migration Init
PM> Update-Database