Cadenas de conexión

La mayoría de los proveedores de bases de datos requieren alguna forma de cadena de conexión para conectarse a la base de datos. A veces, esta cadena de conexión contiene información confidencial que debe protegerse. También es posible que necesite cambiar la cadena de conexión a medida que mueve la aplicación entre entornos, como desarrollo, pruebas y producción.

ASP.NET Core

En ASP.NET Core, el sistema de configuración es muy flexible y la cadena de conexión se puede almacenar en appsettings.json, una variable de entorno, el almacén de secretos del usuario u otro origen de configuración. Consulte la sección de Configuración de la documentación de ASP.NET Core para más información.

Por ejemplo, puede usar la Herramienta de administración de secretos para almacenar la contraseña de la base de datos y, a continuación, en scaffolding, usar una cadena de conexión que simplemente consista en 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

O en el siguiente ejemplo se muestra la cadena de conexión almacenada en appsettings.json.

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

A continuación, el contexto se configura normalmente en Startup.cs leyendo la cadena de conexión de la configuración. Observe que el método GetConnectionString() busca un valor de configuración cuya clave es ConnectionStrings:<connection string name>. Debe importar el espacio de nombres Microsoft.Extensions.Configuration para usar este método de extensión.

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

Aplicaciones WinForms y WPF

Las aplicaciones WinForms, WPF y ASP.NET 4 tienen un patrón de cadena de conexión probado a fondo. La cadena de conexión debe agregarse al archivo App.config de la aplicación (Web.config si usa ASP.NET). Si la cadena de conexión contiene información confidencial, como el nombre de usuario y la contraseña, puede proteger el contenido del archivo de configuración mediante 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 cambiarlas 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");
    }
}