Conectar una aplicación .NET con SQL Server es una de las tareas más comunes en el desarrollo de software empresarial. Sin embargo, una conexión profesional va mucho más allá de abrir un enlace a la base de datos. Implica configurar correctamente la cadena de conexión, proteger las credenciales, utilizar Entity Framework Core o ADO.NET según el escenario, aplicar migraciones y seguir buenas prácticas de seguridad y rendimiento.
1. Instala los paquetes necesarios
Si vas a utilizar Entity Framework Core con SQL Server, instala los siguientes paquetes desde NuGet:
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Tools
Estos paquetes permiten conectar la aplicación con SQL Server y administrar las migraciones de la base de datos.
2. Configura la cadena de conexión
La cadena de conexión debe almacenarse en appsettings.json y nunca escribirse directamente en el código.
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=MiBaseDatos;Trusted_Connection=True;TrustServerCertificate=True;"
}
}
Si utilizas autenticación con usuario y contraseña:
"DefaultConnection": "Server=SERVIDOR;Database=MiBaseDatos;User Id=usuario;Password=contraseña;TrustServerCertificate=True;"
En producción es recomendable guardar estas credenciales mediante variables de entorno, Azure Key Vault o un gestor de secretos.
3. Crea el DbContext
El DbContext representa la sesión con la base de datos.
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options)
: base(options)
{
}
public DbSet<Producto> Productos => Set<Producto>();
}
Cada entidad se convertirá automáticamente en una tabla cuando ejecutes las migraciones.
4. Registra la conexión
En Program.cs registra el contexto utilizando Dependency Injection.
builder.Services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer(
builder.Configuration.GetConnectionString("DefaultConnection")));
De esta manera cualquier servicio o controlador podrá solicitar el contexto mediante inyección de dependencias.
5. Ejecuta las migraciones
Una vez creadas las entidades, genera la base de datos.
dotnet ef migrations add InitialCreate
dotnet ef database update
Las migraciones permiten mantener sincronizado el modelo de datos entre desarrollo, pruebas y producción.
6. Consumir la base de datos
En un servicio puedes acceder fácilmente a la información.
public class ProductoService
{
private readonly AppDbContext _context;
public ProductoService(AppDbContext context)
{
_context = context;
}
public async Task<List<Producto>> ObtenerTodos()
{
return await _context.Productos.ToListAsync();
}
}
Este enfoque mantiene el código desacoplado y facilita las pruebas unitarias.
Buenas prácticas profesionales
No expongas usuarios ni contraseñas en Git. Utiliza archivos de configuración específicos para cada ambiente.
Emplea Dependency Injection en lugar de crear conexiones manualmente.
Utiliza consultas asíncronas (async/await) para mejorar la escalabilidad.
Aplica migraciones controladas y evita modificar la base de datos manualmente.
Usa índices en las tablas más consultadas para mejorar el rendimiento.
Registra errores mediante herramientas como Serilog para facilitar el diagnóstico.
Si realizas operaciones de solo lectura, utiliza AsNoTracking() para reducir el consumo de memoria.
Implementa Repository Pattern únicamente cuando aporte valor al proyecto; Entity Framework Core ya ofrece muchas capacidades de acceso a datos.
Entity Framework Core o ADO.NET
Entity Framework Core es ideal para aplicaciones empresariales porque reduce la cantidad de código, facilita las migraciones y mejora la productividad.
ADO.NET sigue siendo una excelente opción cuando se requiere el máximo rendimiento o un control total sobre las consultas SQL.
La elección dependerá del tipo de proyecto, pero en la mayoría de aplicaciones modernas ASP.NET Core, Entity Framework Core es la alternativa más recomendable.
Una conexión profesional entre .NET y SQL Server no consiste únicamente en establecer comunicación con la base de datos. También implica aplicar buenas prácticas de configuración, seguridad, arquitectura y rendimiento. Al almacenar correctamente las cadenas de conexión, utilizar Dependency Injection, aprovechar Entity Framework Core y gestionar las migraciones, se obtiene una solución robusta, mantenible y preparada para crecer con las necesidades del negocio. Estos principios permiten desarrollar aplicaciones más seguras, escalables y fáciles de mantener tanto en entornos de desarrollo como en producción.

