Compartilhar via


Integração do Entity Framework do SQLite com o Kit de Ferramentas da Comunidade .NET.NET Aspire

Inclui: integração de hospedagem e integração Client

Nota

Essa integração faz parte do do.NET.NET Aspire Community Toolkit e não é oficialmente compatível com a equipe de .NET.NET Aspire.

SQLite é um mecanismo de banco de dados SQL leve, sem servidor e independente que é amplamente usado para armazenamento de dados local em aplicativos. A integração do .NET Aspire SQLite fornece uma maneira de usar bancos de dados SQLite em seus aplicativos .NET Aspire e acessá-los por meio do pacote de suporte Microsoft.EntityFrameworkCore.Sqlite Entity Framework.

Integração de hospedagem

A integração de hospedagem do SQLite modela um banco de dados SQLite como o tipo SQLiteResource e criará o arquivo de banco de dados no local especificado. Para acessar esses tipos e APIs que permitem adicionar o 📦 CommunityToolkit.Aspire. Hosting.SQLite pacote NuGet no do host do aplicativo projeto.

dotnet add package CommunityToolkit.Aspire.Hosting.SQLite

Para obter mais informações, consulte dotnet add package ou Gerenciar dependências de pacotes em .NET aplicações.

Adicionar recurso SQLite

No projeto de host do aplicativo, registre e consuma a integração do SQLite usando o método de extensão AddSQLite para adicionar o banco de dados SQLite ao construtor de aplicativos.

var builder = DistributedApplication.CreateBuilder(args);

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

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

Quando .NET.NET Aspire adiciona um banco de dados SQLite ao host do aplicativo, conforme mostrado no exemplo anterior, ele cria um novo arquivo de banco de dados SQLite no diretório temp dos usuários.

Como alternativa, se você quiser especificar um local personalizado para o arquivo de banco de dados SQLite, forneça os argumentos relevantes para o método AddSqlite.

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

Adicionar recurso SQLiteWeb

Ao adicionar o recurso SQLite, você também pode adicionar o recurso SQLiteWeb, que fornece uma interface da Web para interagir com o banco de dados SQLite. Para fazer isso, use o método de extensão WithSqliteWeb.

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

Esse código adiciona um contêiner com base em ghcr.io/coleifer/sqlite-web ao host do aplicativo, que fornece uma interface da Web para interagir com o banco de dados SQLite ao qual ele está conectado. Cada instância do SQLiteWeb está conectada a um único banco de dados SQLite, o que significa que, se você adicionar várias instâncias do SQLiteWeb, haverá vários contêineres SQLiteWeb.

Adicionando extensões do SQLite

O SQLite dá suporte a extensões que podem ser adicionadas ao banco de dados SQLite. As extensões podem ser fornecidas por meio de um pacote NuGet ou por meio de um local no disco. Use os métodos de extensão WithNuGetExtension ou WithLocalExtension para adicionar extensões ao banco de dados SQLite.

Nota

O suporte a extensões SQLite é considerado experimental e produz um aviso CTASPIRE002.

integração Client

Para começar a usar a integração do cliente .NET.NET Aspire SQLite EF, instale o 📦 CommunityToolkit.Aspire. Microsoft.EntityFrameworkCore.Sqlite pacote NuGet no projeto que utiliza o cliente, ou seja, no projeto do aplicativo que utiliza o cliente SQLite. A integração do cliente SQLite registra uma instância de SqliteConnection que você pode usar para interagir com o SQLite.

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

Adicionar cliente Sqlite

No arquivo Program.cs do projeto que consome o cliente, chame o método de extensão Microsoft.Extensions.Hosting.AspireEFSqliteExtensions.AddSqliteDbContext em qualquer IHostApplicationBuilder para registrar sua subclasse DbContext para utilização através do contêiner de injeção de dependência. O método usa um parâmetro de nome de conexão.

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

Dica

O parâmetro connectionName deve corresponder ao nome usado ao adicionar o recurso SQLite no projeto de host do aplicativo. Para obter mais informações, consulte o recurso SQLite Adicionar.

Depois de adicionar YourDbContext ao construtor, você pode obter a instância de YourDbContext usando a injeção de dependência. Por exemplo, para recuperar o objeto da fonte de dados de um serviço de exemplo, defina-o como um parâmetro de construtor e verifique se a classe ExampleService está registrada com o contêiner de injeção de dependência:

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

Para obter mais informações sobre injeção de dependência, consulte .NET injeção de dependência.

Enriquecer um contexto de banco de dados SQLite

Você pode preferir usar o método Entity Framework padrão para obter o contexto do banco de dados e adicioná-lo ao contêiner de injeção de dependência:

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

Nota

O nome da cadeia de conexão que você passa para o método GetConnectionString deve corresponder ao nome usado ao adicionar o recurso SQLite no projeto de host do aplicativo. Para obter mais informações, consulte Adicionarde recursos do SQLite.

Configuração

A integração do cliente SQLite fornece várias abordagens de configuração e opções para atender aos requisitos e convenções do seu projeto.

Usar uma cadeia de conexão

Ao usar uma cadeia de conexão da seção de configuração ConnectionStrings, você pode fornecer o nome da cadeia de conexão ao chamar o método Microsoft.Extensions.Hosting.AspireEFSqliteExtensions.AddSqliteDbContext:

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

Em seguida, a cadeia de conexão será recuperada da seção de configuração ConnectionStrings.

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

Usar provedores de configuração

A integração do cliente SQLite dá suporte a Microsoft.Extensions.Configuration. Ele carrega a Microsoft.Extensions.Hosting.SqliteConnectionSettings do appsettings.json ou de outros provedores de configuração usando a chave Aspire:Sqlite:EntityFrameworkCore:Sqlite. Exemplo _appsettings.json que configura algumas das opções:

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