Compartilhar via


integração .NET AspireSQL Server

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

SQL Server é um sistema de gerenciamento de banco de dados relacional desenvolvido pela Microsoft. A integração .NET AspireSQL Server permite que você se conecte a instâncias de SQL Server existentes ou crie novas instâncias de .NET com a imagem de contêiner mcr.microsoft.com/mssql/server.

Integração de hospedagem

A integração de hospedagem do SQL Server modela o server como o tipo SqlServerServerResource e o banco de dados como o tipo SqlServerDatabaseResource. Para acessar esses tipos e APIs, adicione o pacote NuGet 📦Aspire.Hosting.SqlServer no projeto do host do aplicativo .

dotnet add package Aspire.Hosting.SqlServer

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

Adicionar recurso SQL Server e recurso de banco de dados

No projeto de host do aplicativo, chame AddSqlServer para adicionar e retornar um gerador de recursos SQL Server. Encadear uma chamada ao construtor do recurso retornado para AddDatabase, a fim de adicionar o recurso de banco de dados SQL Server.

var builder = DistributedApplication.CreateBuilder(args);

var sql = builder.AddSqlServer("sql")
                 .WithLifetime(ContainerLifetime.Persistent);

var db = sql.AddDatabase("database");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(db)
       .WaitFor(db);

// After adding all resources, run the app...

Nota

O contêiner é lento para começar, assim, é recomendável utilizar uma vida útil persistente para evitar reinicializações desnecessárias. Para obter mais informações, consulte tempo de vida do recurso contêiner.

Quando .NET.NET Aspire adiciona uma imagem de contêiner ao host do aplicativo, conforme mostrado no exemplo anterior com a imagem mcr.microsoft.com/mssql/server, ele cria uma nova instância de SQL Server em seu computador local. Uma referência ao construtor de recursos SQL Server (a variável sql) é usada para adicionar um banco de dados. O banco de dados é nomeado database e, em seguida, adicionado ao ExampleProject. O recurso SQL Server inclui credenciais padrão com um username de sa e um password aleatório gerado usando o método CreateDefaultPasswordParameter.

Quando o host do aplicativo é executado, a senha é armazenada no repositório secreto do host do aplicativo. Ele é adicionado à seção Parameters, por exemplo:

{
  "Parameters:sql-password": "<THE_GENERATED_PASSWORD>"
}

O nome do parâmetro é sql-password, mas na verdade é apenas formatar o nome do recurso com um sufixo -password. Para obter mais informações, consulte Armazenamento seguro de segredos do aplicativo no desenvolvimento em ASP.NET Core e Adicionar SQL Server recurso com parâmetros.

O método WithReference configura uma conexão no ExampleProject denominado database.

Dica

Se você preferir se conectar a um SQL Serverexistente, chame AddConnectionString em vez disso. Para obter mais informações, consulte Recursos existentes de referência.

Adicionar recurso SQL Server com volume de dados

Para adicionar um volume de dados ao recurso SQL Server, chame o método WithDataVolume no recurso SQL Server:

var builder = DistributedApplication.CreateBuilder(args);

var sql = builder.AddSqlServer("sql")
                 .WithDataVolume();

var db = sql.AddDatabase("database");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(db)
       .WaitFor(db);

// After adding all resources, run the app...

O volume de dados é usado para armazenar permanentemente os dados de SQL Server fora do ciclo de vida de seu contêiner. O volume de dados é montado no caminho /var/opt/mssql no contêiner SQL Server e, quando um parâmetro name não é fornecido, o nome é gerado aleatoriamente. Para obter mais informações sobre volumes de dados e detalhes sobre por que eles são preferenciais em vez de associar montagens, consulte Docker documentos: Volumes.

Aviso

A senha é armazenada no volume de dados. Ao usar um volume de dados e se a senha for alterada, ela não funcionará até que você exclua o volume.

Adicionar recurso SQL Server com montagem de vinculação de dados

Para adicionar uma montagem de vinculação de dados ao recurso SQL Server, chame o método WithDataBindMount:

var builder = DistributedApplication.CreateBuilder(args);

var sql = builder.AddSqlServer("sql")
                 .WithDataBindMount(source: @"C:\SqlServer\Data");

var db = sql.AddDatabase("database");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(db)
       .WaitFor(db);

// After adding all resources, run the app...

Importante

Os de dados associam montagens têm funcionalidade limitada em comparação com volumes, que oferecem melhor desempenho, portabilidade e segurança, tornando-os mais adequados para ambientes de produção. No entanto, as montagens de vínculo permitem acesso direto e modificação de arquivos no sistema host, ideal para desenvolvimento e teste quando são necessárias alterações em tempo real.

As montagens de associação de dados dependem do sistema de arquivos do computador host para persistir os dados SQL Server entre reinicializações de contêiner. A montagem de dados é feita no caminho C:\SqlServer\Data no Windows (ou /SqlServer/Data no Unix) no computador host dentro do contêiner SQL Server. Para obter mais informações sobre montagens de ligação de dados, consulte a documentação Docker: Montagens de ligação.

Adicionar SQL Server recurso com parâmetros

Quando quiser fornecer explicitamente a senha usada pela imagem de contêiner, você pode fornecer essas credenciais como parâmetros. Considere o seguinte exemplo alternativo:

var builder = DistributedApplication.CreateBuilder(args);

var password = builder.AddParameter("password", secret: true);

var sql = builder.AddSqlServer("sql", password);
var db = sql.AddDatabase("database");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(db)
       .WaitFor(db);

// After adding all resources, run the app...

Para obter mais informações sobre como fornecer parâmetros, consulte Parâmetros externos.

Conectar-se aos recursos do banco de dados

Quando o host do aplicativo .NET Aspire é executado, os recursos de banco de dados do serverpodem ser acessados de ferramentas externas, como o SQL Server Management Studio (SSMS) ou o Azure Data Studio. A cadeia de conexão para o recurso de banco de dados está disponível nas variáveis de ambiente dos recursos dependentes e pode ser acessada usando o painel .NET.NET Aspire: painel Detalhes do Recurso. A variável de ambiente é nomeada ConnectionStrings__{name} em que {name} é o nome do recurso de banco de dados, neste exemplo é database. Use a cadeia de conexão para se conectar ao recurso de banco de dados a partir de ferramentas externas. Imagine que você tenha um banco de dados chamado todos com uma única tabela de dbo.Todos.

Para se conectar ao recurso de banco de dados do SQL Server Management Studio, siga estas etapas:

  1. Abra o SSMS.

  2. Na caixa de diálogo Conectar ao Server, selecione a guia Parâmetros de Conexão Adicionais.

  3. Cole a cadeia de conexão no campo Parâmetros de Conexão Adicionais e selecione Conectar.

    SQL Server Management Studio: conectar à janela de conexão Server.

  4. Se estiver conectado, você poderá ver o recurso de banco de dados nodo Pesquisador de Objetos do :

    SQL Server Management Studio: conectado ao banco de dados.

Para obter mais informações, consulte SQL Server Management Studio: Conectar-se a um server.

Verificações de integridade de integração de hospedagem

A integração de hospedagem SQL Server adiciona automaticamente uma verificação de integridade para o recurso de SQL Server. A verificação de integridade verifica se o SQL Server está em execução e se uma conexão pode ser estabelecida com ele.

A integração de hospedagem depende do pacote NuGet 📦 AspNetCore.HealthChecks.SqlServer.

integração Client

Para começar a usar a integração .NET AspireSQL Serverclient, instale o 📦Aspire. Microsoft.Data.SqlClient pacote NuGet no projeto que consome client, ou seja, o projeto para o aplicativo que usa o SQL Serverclient. A integração SQL Serverclient registra uma instância de SqlConnection que você pode usar para interagir com SQL Server.

dotnet add package Aspire.Microsoft.Data.SqlClient

Adicionar SQL Serverclient

No arquivo Program.cs do seu projeto que consome client, chame o método de extensão AddSqlServerClient em qualquer IHostApplicationBuilder para registrar um SqlConnection para uso por meio do contêiner de injeção de dependência. O método usa um parâmetro de nome de conexão.

builder.AddSqlServerClient(connectionName: "database");

Dica

O parâmetro connectionName deve corresponder ao nome usado ao adicionar o recurso de banco de dados SQL Server no projeto de host do aplicativo. Em outras palavras, quando você chama AddDatabase e fornece um nome de database esse mesmo nome deve ser usado ao chamar AddSqlServerClient. Para obter mais informações, consulte adicionar o recurso SQL Server e o recurso de banco de dados.

Em seguida, você pode usar a injeção de dependência para recuperar a instância de SqlConnection. Por exemplo, para recuperar a conexão de um serviço de exemplo:

public class ExampleService(SqlConnection connection)
{
    // Use connection...
}

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

Adicionar SQL Serverclient com chave

Pode haver situações em que você deseja registrar várias instâncias de SqlConnection com nomes de conexão diferentes. Para registrar clientes chaveados de SQL Server, chame o método AddKeyedSqlServerClient:

builder.AddKeyedSqlServerClient(name: "mainDb");
builder.AddKeyedSqlServerClient(name: "loggingDb");

Importante

Ao usar serviços com chave, espera-se que seu recurso de SQL Server configure dois bancos de dados nomeados, um para o mainDb e outro para o loggingDb.

Em seguida, você pode recuperar as instâncias de SqlConnection usando injeção de dependência. Por exemplo, para recuperar a conexão de um serviço de exemplo:

public class ExampleService(
    [FromKeyedServices("mainDb")] SqlConnection mainDbConnection,
    [FromKeyedServices("loggingDb")] SqlConnection loggingDbConnection)
{
    // Use connections...
}

Para obter mais informações sobre serviços com chave, consulte .NET injeção de dependência: serviços com chave.

Configuração

A integração .NET AspireSQL Server fornece várias opções para configurar a conexão com base nos 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 AddSqlServerClient:

builder.AddSqlServerClient(connectionName: "sql");

Em seguida, a cadeia de conexão é recuperada da seção de configuração ConnectionStrings:

{
  "ConnectionStrings": {
    "database": "Data Source=myserver;Initial Catalog=master"
  }
}

Para obter mais informações sobre como formatar essa cadeia de conexão, consulte a ConnectionString .

Usar provedores de configuração

A integração .NET AspireSQL Server dá suporte a Microsoft.Extensions.Configuration. Ele carrega a MicrosoftDataSqlClientSettings da configuração usando a chave Aspire:Microsoft:Data:SqlClient. O snippet a seguir é um exemplo de um arquivo de appsettings.json que configura algumas das opções:

{
  "Aspire": {
    "Microsoft": {
      "Data": {
        "SqlClient": {
          "ConnectionString": "YOUR_CONNECTIONSTRING",
          "DisableHealthChecks": false,
          "DisableMetrics": true
        }
      }
    }
  }
}

Para o esquema de integração SQL ServerclientJSON completo, consulte Aspire. Microsoft.Data.SqlClient/ConfigurationSchema.json.

Usar delegados embutidos

Além disso, você pode passar o delegado Action<MicrosoftDataSqlClientSettings> configureSettings para configurar algumas ou todas as opções embutidas, por exemplo, para desabilitar verificações de integridade do código:

builder.AddSqlServerClient(
    "database",
    static settings => settings.DisableHealthChecks = true);

Client verificações de integridade de integração

Por padrão, as integrações .NET.NET Aspire habilitam verificações de integridade para todos os serviços. Para obter mais informações, consulte .NET.NET Aspire visão geral de integrações.

A integração .NET AspireSQL Server:

  • Adiciona a verificação de integridade quando MicrosoftDataSqlClientSettings.DisableHealthChecks é false, que tenta se conectar ao SQL Server.
  • Integra-se ao endpoint HTTP /health, que especifica que todas as verificações de saúde registradas devem ser aprovadas para que o aplicativo seja considerado pronto para aceitar tráfego.

Observabilidade e telemetria

.NET .NET Aspire integrações configuram automaticamente configurações de Log, Rastreamento e Métricas, que às vezes são conhecidas como os pilares da observabilidade. Para obter mais informações sobre a observabilidade e a telemetria de integração, consulte .NET.NET Aspire visão geral das integrações. Dependendo do serviço de backup, algumas integrações só podem dar suporte a alguns desses recursos. Por exemplo, algumas integrações dão suporte a registro em log e rastreamento, mas não a métricas. Os recursos de telemetria também podem ser desabilitados usando as técnicas apresentadas na seção Configuration.

Registro de Logs

A integração .NET AspireSQL Server atualmente não habilita o registro em log por padrão devido a limitações do Microsoft.Data.SqlClient.

Rastreamento

A integração .NET AspireSQL Server emite as seguintes atividades de rastreamento usando OpenTelemetry:

  • OpenTelemetry.Instrumentation.SqlClient

Métricas

A integração .NET AspireSQL Server emitirá as seguintes métricas usando OpenTelemetry:

  • Microsoft.Data.SqlClient.EventSource
    • active-hard-connections
    • hard-connects
    • hard-disconnects
    • active-soft-connects
    • soft-connects
    • soft-disconnects
    • number-of-non-pooled-connections
    • number-of-pooled-connections
    • number-of-active-connection-pool-groups
    • number-of-inactive-connection-pool-groups
    • number-of-active-connection-pools
    • number-of-inactive-connection-pools
    • number-of-active-connections
    • number-of-free-connections
    • number-of-stasis-connections
    • number-of-reclaimed-connections

Consulte também