Compartir a través de


Cadenas de conexión

La mayoría de los proveedores de bases de datos requieren un cadena de conexión para conectarse a la base de datos. El cadena de conexión:

  • Puede contener información confidencial que debe protegerse.
  • Es posible que tenga que cambiar cuando la aplicación se mueve a diferentes entornos, como desarrollo, pruebas y producción.

Para más información, consulte Flujos de autenticación seguros.

ASP.NET Core

La configuración de ASP.NET Core puede almacenar cadena de conexión con varios proveedores:

Advertencia

Los secretos nunca se deben agregar a los archivos de configuración.

Por ejemplo, la herramienta Administrador de secretos puede almacenar la contraseña de la base de datos. Al aplicar scaffolding y usar el administrador de secretos, un cadena de conexión consta de Name=<database-alias>.

Consulte la sección Configuración de la documentación de ASP.NET Core para obtener más información.

dotnet user-secrets init
dotnet user-secrets set ConnectionStrings:YourDatabaseAlias "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=YourDatabase"

A continuación, en scaffolding, use un cadena de conexión que consta de Name=<database-alias>.

dotnet ef dbcontext scaffold Name=ConnectionStrings:YourDatabaseAlias Microsoft.EntityFrameworkCore.SqlServer

Advertencia

En este artículo se usa una base de datos local que no requiere que el usuario se autentique. Las aplicaciones de producción deben usar el flujo de autenticación más seguro disponible. Para obtener más información sobre la autenticación para aplicaciones de prueba y producción implementadas, consulta Flujos de autenticación seguros.

En el ejemplo siguiente se muestra el cadena de conexión almacenado en appsettings.json.

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

Normalmente, el contexto se configura en Program.cs con el cadena de conexión que se lee desde la configuración. Tenga en cuenta que el método GetConnectionString busca un valor de configuración cuya clave es ConnectionStrings:<connection string name>. GetConnectionString requiere el espacio de nombres 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));

Aplicaciones WinForms y WPF

Las aplicaciones WinForms, WPF y ASP.NET 4 tienen un patrón de cadena de conexión probado a fondo. El cadena de conexión debe agregarse al archivo de la App.config aplicación o Web.config al usar ASP.NET. La cadena de conexión que contiene información confidencial, como el nombre de usuario y la contraseña, debe proteger el contenido del archivo de configuración mediante la configuración protegida.

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

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

Sugerencia

La configuración providerName no es necesaria en las cadenas de conexión de EF Core almacenadas en App.config porque el proveedor de base de datos está configurado mediante código.

A continuación, puede leer la cadena de conexión mediante la API de ConfigurationManager en el método OnConfiguring del contexto. Es posible que tenga que agregar una referencia al ensamblado del marco System.Configuration para poder usar esta 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 de Windows (UWP)

Las cadenas de conexión de una aplicación para UWP suelen ser una conexión de SQLite que solo especifica un nombre de archivo local. Normalmente no contienen información confidencial y no es necesario cambiarla a medida que se implementa una aplicación. Por lo tanto, normalmente está bien dejar estas cadenas de conexión en el código, tal y como se muestra a continuación. Si quiere sacarlas del código, UWP admite el concepto de configuración, consulte la sección de Configuración de la aplicación de la documentación de UWP para más información.

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");
    }
}