Cadeias de Conexão
A maioria dos provedores de banco de dados requer uma cadeia de conexão para se conectar ao banco de dados. A cadeia de conexão:
- Pode conter informações confidenciais que precisam ser protegidas.
- Pode ser necessário alterar quando o aplicativo é movido para ambientes diferentes, como desenvolvimento, teste e produção.
Para obter mais informações, consulte Fluxos de autenticação seguros
ASP.NET Core
A configuração do ASP.NET Core pode armazenar cadeias de conexão com vários provedores:
appsettings.Development.json
No arquivo ouappsettings.json
.- Em uma variável de ambiente
- Usando o Azure Key Vault
- Usando a ferramenta Gerenciador de segredos
Aviso
Os segredos nunca devem ser adicionados aos arquivos de configuração.
Por exemplo, a ferramenta Gerenciador de segredos pode armazenar a senha do banco de dados. Ao fazer scaffolding e usar o Gerenciador de segredos, uma cadeia de conexão consiste em Name=<database-alias>
.
Consulte a seção Configuração da documentação do ASP.NET Core para obter mais informações.
dotnet user-secrets init
dotnet user-secrets set ConnectionStrings:YourDatabaseAlias "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=YourDatabase"
Em seguida, no scaffolding, use uma cadeia de conexão que consista em Name=<database-alias>
.
dotnet ef dbcontext scaffold Name=ConnectionStrings:YourDatabaseAlias Microsoft.EntityFrameworkCore.SqlServer
Aviso
Este artigo usa um banco de dados local que não exige que o usuário seja autenticado. Os aplicativos de produção devem usar o fluxo de autenticação mais seguro disponível. Para obter mais informações sobre autenticação para aplicativos de teste e produção implantados, consulte Fluxos de autenticação seguros.
O exemplo a seguir mostra a cadeia de conexão armazenada no appsettings.json
.
{
"ConnectionStrings": {
"BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"
},
}
O contexto normalmente é configurado com Program.cs
a cadeia de conexão que está sendo lida na configuração. Observe que o método GetConnectionString procura um valor de configuração cuja chave é ConnectionStrings:<connection string name>
. GetConnectionString
requer o namespace Microsoft.Extensions.Configuration .
var conString = builder.Configuration.GetConnectionString("BloggingContext") ??
throw new InvalidOperationException("Connection string 'BloggingContext'" +
" not found.");
builder.Services.AddDbContext<BloggingContext>(options =>
options.UseSqlServer(conString));
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 do App.config
aplicativo ou Web.config
ao usar ASP.NET. A cadeia de conexão que contém informações confidenciais, como nome de usuário e senha, deve 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. Eles normalmente não contêm informações confidenciais e não precisam ser alterados à 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");
}
}