次の方法で共有


.NET .NET Aspire Community Toolkit SQLite Entity Framework の統合

含まれるもの: ホスティング統合と Client 統合

手記

この統合は .NET.NET Aspire Community Toolkit の一部であり、.NET Aspire されていません。

SQLite は、アプリケーションのローカル データ ストレージに広く使用されている、軽量でサーバーレスの自己完結型 SQL データベース エンジンです。 .NET Aspire SQLite 統合は、.NET Aspire アプリケーション内で SQLite データベースを使用し、Microsoft.EntityFrameworkCore.Sqlite Entity Framework サポート パッケージを介してアクセスする方法を提供します。

ホスティング統合

SQLite ホスティング統合は、SQLite データベースを SQLiteResource 型としてモデル化し、指定した場所にデータベース ファイルを作成します。 これらの型と API にアクセスするためには、📦 CommunityToolkit、Aspire.Hosting.SQLite NuGet パッケージを アプリ ホスト プロジェクトに追加する必要があります。

dotnet add package CommunityToolkit.Aspire.Hosting.SQLite

詳細については、「dotnet パッケージ の追加」または「.NET アプリケーションでのパッケージの依存関係の管理」を参照してください。

SQLite リソースの追加

アプリ ホスト プロジェクトで、AddSQLite 拡張メソッドを使用して SQLite 統合を登録して使用し、SQLite データベースをアプリケーション ビルダーに追加します。

var builder = DistributedApplication.CreateBuilder(args);

var sqlite = builder.AddSQLite("my-database");

var exampleProject = builder.AddProject<Projects.ExampleProject>()
                            .WithReference(sqlite);

前 .NET.NET Aspire 例に示すように、SQLite データベースをアプリ ホストに追加すると、ユーザーの一時ディレクトリに新しい SQLite データベース ファイルが作成されます。

または、SQLite データベース ファイルのカスタムの場所を指定する場合は、AddSqlite メソッドに関連する引数を指定します。

var sqlite = builder.AddSQLite("my-database", "C:\\Database\\Location", "my-database.db");

SQLiteWeb リソースの追加

SQLite リソースを追加するときに、SQLiteWeb リソースを追加することもできます。SQLiteWeb リソースには、SQLite データベースと対話するための Web インターフェイスが用意されています。 これを行うには、WithSqliteWeb 拡張メソッドを使用します。

var sqlite = builder.AddSQLite("my-database")
                    .WithSqliteWeb();

このコードは、ghcr.io/coleifer/sqlite-web に基づくコンテナーをアプリ ホストに追加します。これにより、接続されている SQLite データベースと対話するための Web インターフェイスが提供されます。 各 SQLiteWeb インスタンスは 1 つの SQLite データベースに接続されます。つまり、複数の SQLiteWeb インスタンスを追加すると、複数の SQLiteWeb コンテナーが存在します。

SQLite 拡張機能の追加

SQLite では、SQLite データベースに追加できる拡張機能がサポートされています。 拡張機能は、NuGet パッケージまたはディスク上の場所を介して提供できます。 SQLite データベースに拡張機能を追加するには、WithNuGetExtension または WithLocalExtension 拡張メソッドを使用します。

手記

SQLite 拡張機能のサポートは試験段階と見なされ、CTASPIRE002 警告が生成されます。

Client 統合

.NET .NET Aspire SQLite EF クライアント統合を開始するには、📦 CommunityToolkit をインストールします。Aspire.Microsoft.EntityFrameworkCore.Sqlite クライアントを使用するプロジェクト、つまり SQLite クライアントを使用するアプリケーションのプロジェクトの NuGet パッケージです。 SQLite クライアント統合により、SQLite との対話に使用できる SqliteConnection インスタンスが登録されます。

dotnet add package CommunityToolkit.Aspire.Microsoft.EntityFrameworkCore.Sqlite

Sqlite クライアントを追加する

クライアントを使用するプロジェクトの Program.cs ファイルで、任意の Microsoft.Extensions.Hosting.AspireEFSqliteExtensions.AddSqliteDbContextIHostApplicationBuilder 拡張メソッドを呼び出して、依存関係挿入コンテナーを介して使用する DbContext サブクラスを登録します。 このメソッドは、接続名パラメーターを受け取ります。

builder.AddSqliteDbContext<YourDbContext>(connectionName: "sqlite");

ヒント

connectionName パラメーターは、アプリ ホスト プロジェクトで SQLite リソースを追加するときに使用する名前と一致する必要があります。 詳細については、「SQLite リソースの追加」を参照してください。

ビルダーに YourDbContext を追加した後、依存関係の挿入を使用して YourDbContext インスタンスを取得できます。 たとえば、サンプル サービスからデータ ソース オブジェクトを取得するには、それをコンストラクター パラメーターとして定義し、ExampleService クラスが依存関係挿入コンテナーに登録されていることを確認します。

public class ExampleService(YourDbContext context)
{
    // Use context...
}

依存性注入についての詳細は、依存性注入 .NET 参照してください。

SQLite データベース コンテキストを強化する

標準の Entity Framework メソッドを使用してデータベース コンテキストを取得し、依存関係挿入コンテナーに追加することもできます。

builder.Services.AddDbContext<YourDbContext>(options =>
    options.UseSqlite(builder.Configuration.GetConnectionString("sqlite")
        ?? throw new InvalidOperationException("Connection string 'sqlite' not found.")));

手記

GetConnectionString メソッドに渡す接続文字列名は、アプリ ホスト プロジェクトで SQLite リソースを追加するときに使用する名前と一致する必要があります。 詳細については、「SQLite リソースの追加」を参照してください。

設定

SQLite クライアント統合には、プロジェクトの要件と規則を満たす複数の構成アプローチとオプションが用意されています。

接続文字列を使用する

ConnectionStrings 構成セクションの接続文字列を使用する場合は、Microsoft.Extensions.Hosting.AspireEFSqliteExtensions.AddSqliteDbContext メソッドを呼び出すときに接続文字列の名前を指定できます。

builder.AddSqliteDbContext<YourDbContext>("sqlite");

その後、接続文字列は ConnectionStrings 構成セクションから取得されます。

{
  "ConnectionStrings": {
    "sqlite": "Data Source=C:\\Database\\Location\\my-database.db"
  }
}

構成プロバイダーを使用する

SQLite クライアント統合では、Microsoft.Extensions.Configurationがサポートされます。 Microsoft.Extensions.Hosting.SqliteConnectionSettings キーを使用して、appsettings.json または他の構成プロバイダーから Aspire:Sqlite:EntityFrameworkCore:Sqlite を読み込みます。 一部のオプションを構成する _appsettings.json の例:

{
  "Aspire": {
    "Sqlite": {
      "EntityFrameworkCore": {
        "Sqlite": {
          "ConnectionString": "Data Source=C:\\Database\\Location\\my-database.db",
          "DisableHealthCheck": true
        }
      }
    }
  }
}