Cadeias de Conexão

A maioria dos provedores de banco de dados exige alguma forma de cadeia de conexão para se conectar ao banco de dados. Às vezes, essa cadeia de conexão contém informações confidenciais que precisam ser protegidas. Talvez você também precise alterar a cadeia de conexão à medida que move seu aplicativo entre ambientes, como desenvolvimento, teste e produção.

ASP.NET Core

No ASP.NET Core, o sistema de configuração é muito flexível e a cadeia de conexão pode ser armazenada em appsettings.json, uma variável de ambiente, no repositório de segredos do usuário ou em outra fonte de configuração. Consulte a seção Configuração da documentação do ASP.NET Core para obter mais detalhes.

Por exemplo, você pode usar a ferramenta Gerenciador de Segredos para armazenar sua senha de banco de dados e, em scaffolding, usar uma cadeia de conexão que consiste simplesmente em Name=<database-alias>.

dotnet user-secrets set ConnectionStrings:YourDatabaseAlias "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=YourDatabase"
dotnet ef dbcontext scaffold Name=ConnectionStrings:YourDatabaseAlias Microsoft.EntityFrameworkCore.SqlServer

Ou o exemplo a seguir mostra a cadeia de conexão armazenada em appsettings.json.

{
  "ConnectionStrings": {
    "BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"
  },
}

Em seguida, o contexto normalmente é configurado no Startup.cs com a cadeia de conexão sendo lida da configuração. Observe que o método GetConnectionString() procura um valor de configuração cuja chave é ConnectionStrings:<connection string name>. Você precisa importar o namespace Microsoft.Extensions.Configuration para usar esse método de extensão.

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<BloggingContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("BloggingDatabase")));
}

Aplicativos WinForms e WPF

Os aplicativos WinForms, WPF e ASP.NET 4 têm um padrão de cadeia de conexão testado repetidamente. A cadeia de conexão deve ser adicionada ao arquivo App.config do aplicativo (Web.config se você estiver usando ASP.NET). Se a cadeia de conexão contiver informações confidenciais, como nome de usuário e senha, você poderá proteger o conteúdo do arquivo de configuração usando a Configuração Protegida.

<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <connectionStrings>
    <add name="BloggingDatabase"
         connectionString="Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" />
  </connectionStrings>
</configuration>

Dica

A configuração providerName não é necessária em cadeias de conexão do EF Core armazenadas em App.config porque o provedor de banco de dados está configurado por meio de código.

Em seguida, você pode ler a cadeia de conexão usando a API ConfigurationManager no método OnConfiguring do seu contexto. Talvez seja necessário adicionar uma referência ao assembly da estrutura System.Configuration para poder usar essa API.

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
      optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["BloggingDatabase"].ConnectionString);
    }
}

Plataforma Universal do Windows (UWP)

Cadeias de conexão em um aplicativo UWP normalmente são uma conexão SQLite que apenas especifica um nome de arquivo local. Normalmente, elas não contêm informações confidenciais e não precisam ser alteradas à medida que um aplicativo é implantado. Como tal, essas cadeias de conexão geralmente são boas para serem deixadas no código, conforme mostrado abaixo. Se você quiser movê-los para fora do código, a UWP oferecerá suporte ao conceito de configurações, consulte a Seção das Configurações do Aplicativo da documentação da UWP para obter detalhes.

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
            optionsBuilder.UseSqlite("Data Source=blogging.db");
    }
}