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

Em ASP.NET Core o sistema de configuração é muito flexível e a cadeia de conexão pode ser armazenada em appsettings.jsonuma variável de ambiente, o repositório de segredo do usuário ou 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 do Gerenciador de Segredos para armazenar sua senha de banco de dados e, em scaffolding, usar uma cadeia de Name=<database-alias>conexão que consiste simplesmente em .

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 Startup.cs com a cadeia de conexão sendo lida da configuração. Observe que o GetConnectionString() método 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 WPF WinForms &

Os aplicativos WinForms, WPF e ASP.NET 4 têm um padrão de cadeia de conexão testado e testado. 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 providerName configuração 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 ConfigurationManager API no método do OnConfiguring seu contexto. Talvez seja necessário adicionar uma referência ao assembly de System.Configuration estrutura 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 dá suporte ao conceito de configurações, consulte a seção Configurações do Aplicativo da documentação 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");
    }
}