Conectado a base de datos SQL server
Clase 11 de 25 • Curso de Fundamentos de Entity Framework
Contenido del curso
Clase 11 de 25 • Curso de Fundamentos de Entity Framework
Contenido del curso
Andy Leonardo Ochoa López
Juan Francisco Juarez
Santiago Vasquez
Thomas Jeffery
Cristian Almeida
Juan Daniel Zuluaga Serna
Elvis Salvatierra
Miguel Teheran
Brandom Rafael Ledesma Muñoz
Wilson Alexánder Laguna Cárdenas
Juan Betancur
Fernando José Ureta Espinoza
Boris Vargas Paucara
Andres Antonio Santisteban Lino
kadhir alberto peña riofrio
Zoila Yaneth Villatoro Garcia
Franklin Gil
Platzi Team
Randall Chacón Sarmiento
Wilson Antonio Ruiz Fermin
Claudio José Baldassa
Wilson Bienvenido Otaño Mateo
Edinson Jesús Paternina Rivera
Miguel Teheran
Hernando Alonso
Franklin Gil
Jorge Luis Sanchez Barreneche
Luan de Souza
Gabi Richards
Julio Ariel Rocha Soria
Rodrigo Ramos
Andres Villanueva Tabares
Cristian Isaac Vargas
José Luis Martínez Hernández
Yoan Esteban Lopez Garcia
Jose Zertuche
Andres Villanueva Tabares
Rommel Olachea
Miguel Teheran
Kevin Eduardo Vásquez Oliva
Miguel Teheran
Juan Sebastian Ramirez Leyva
Miguel Teheran
Francisco Javier Pineda Giraldo
Andrey Arturo Vega Velasquez
Xavier Medina Veintimilla
R PMdo
Sergio Andres Castañeda Castañeda
Miguel Teheran
SOLUCIÓN PARA ESTE ERROR:
Microsoft.Data.SqlClient.SqlException (0x80131904): A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - La cadena de certificación fue emitida por una entidad en la que no se confía.)
Si les sale este error, deben agregar TrustServerCertificate=True en el fnal de su DataSource así:
"Data Source=LAPTOP-731U8C1L\\MSSQLSERVER2014;Initial Catalog=TareasDb;user id=sa;password=contraseña;TrustServerCertificate=True"
Funciona excelente para windows. Gracias !
Eres el mejoor!
Por si alguien trata de conectar a su DB usando la seguridad de Windows, la cadena de conexion le tiene que quedar asi:
"Data Source=(local); Initial Catalog= TareasDb;Trusted_Connection=True; Integrated Security=True"
Donde dice (local) si no les toma tienen que ir y tomar el nombre de su servidor (eso lo consiguen al abrir el SQL Server y la ventana que aparece al conectar les dice el nombre del servidor ese les toma seguro
Gran aporte. Muchas gracias. Fue de gran ayuda.
Toma tu Like. Llevaba unos dias intentando lograrlo y no encontraba la respuesta en ningun lado. Fue de gran ayuda. Crack
Para Postgres yo utilice lo siguiente:
en vez de AddSqlServer utilizamos AddNpgsql
builder.Services.AddNpgsql<TareasContext>(builder.Configuration.GetConnectionString("TareasDb"));
tambien obtengo la cadena de conexión del archivo appsettings.json agregando lo siguiente:
"ConnectionStrings": { "TareasDb" : "User ID=postgres;Password=postgrespw;Host=localhost;Port=55000;Database=TareasDb;" }
Nota: como yo levante un Docker de Postgres estoy utilizando el puerto 55000, pero por defecto el puerto de Postgres es 5423.
Excelente aporte!
Estoy buscando la manera de hacerlo pero con MySQL, aun no he podido, si alguien sabe podría decirme como :3
Esto se hace cuando no se tiene la DB. Si ya se tiene la DB, se puede utilizar un tool de EF para generar el contexto, este es el comando: dotnet ef dbcontext scaffold "Data Source=DBServer;User ID=User;Password=Pass;Initial Catalog=DBb;Persist Security Info=False;Pooling=False;MultipleActiveResultSets=False;Encrypt=False;TrustServerCertificate=False" Microsoft.EntityFrameworkCore.SqlServer -o FolderForModels -c "ContextFileName" --force
voy a probarlo, muchas gracias.
Buen aporte, gracias.
Mi solución utilizando PostgreSQL 10.5 juntamente con Docker:
Resultado:
Gracias men, me ayudo los pantallazos estaba estancado en SQL server me pase a PostgreSQL
Me podrias compartir el repositorio para ver la conexion a detalle tambien la estructura del proyecto.
Por si alguien tiene duda de como se hace con docker, les dejo indicaciones ☺️☺️📌📌 Archivo > docker-compose.yml
version: '3.7' volumes: sqldata: services: sqlserver: container_name: 'sqlserver' image: 'mcr.microsoft.com/mssql/server:2019-latest' environment: - ACCEPT_EULA=Y - MSSQL_PID=Developer - SA_PASSWORD=mySecret1234 ports: - "1433:1433" volumes: - sqldata:/var/opt/mssql command: /bin/sh -c "(/opt/mssql/bin/sqlservr &) && sleep 10s && /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P mySecret1234 -d master -Q 'CREATE DATABASE TareasDB' && sleep infinity"
Si quieren pueden quitar la sección de command debido a que el endpoint que utiliza el profesor ya crea la base de datos y para conectarse en el archivo de >** Program.cs ** solamente necesitan agregar lo siguiente
builder.Services.AddSqlServer<TareasContext>(builder.Configuration.GetConnectionString("Server=localhost;Database=TareasDB;User Id=SA;Password=mySecret1234;MultipleActiveResultSets=true;"));
De ahi solo queda probar el endpoint y espero que todo les funcione bien 😊😊😊
Te rifaste! Buenisima!
Idolaaaaa 🔥
La conexión dentro del program.cs es una mala práctica. Sin embargo, en la siguiente clase se utiliza el archivo appsettings para pasar la conexion de base de datos.
Exactamente. Lo mejor seria tener tu clase Startup donde configure todos tus servicios entre ellos el propio EF y luego pasar el nombre de tu cadena de conexión que lo recomendable seria que venga de un archivo de configuración como el appsetting.
Para MySQL yo usé
builder.Services.AddDbContext<TareasContext>(options => options.UseMySQL("server=localhost;database=TareasDb;user=tuUsuario;password=tuPasswrod"));
y me funcionó perfecto.
Muchas gracias se parece mucho a como se hace en windows forms
builder.Services.AddSqlServer<TareasContext>("Data Source=.;Initial Catalog=TareasDB;Integrated Security=True");
En esta linea accedemos a una bd local pero con las credenciales de windows
Correcto, realiza la autenticación integrada a la maquina local donde se esta ejecutando el proyecto. buen aporte!
en mi caso utilicé esta misma con una variación debido a que tengo más de una instancia de SqlServer en mi sistema y la que utilizo en mi proyecto Platzi no es la instancia por defecto: builder.Services.AddSqlServer<TareasContext>("initial catalog=TareasDB;data source=NOMBRESERVIDOR\NOMBREINSTANCIA;Connect Timeout=360;integrated security=yes");
Si quieres usar MySql:
Instala el paquete MySql.EntityFrameworkCore Ojo que no sea MySql.Data.EntityFrameworkCore
dotnet add package MySql.EntityFrameworkCore --version 6.0.7
Agregas la coneccion
builder.Services.AddDbContext<TasksContext>( opt => opt.UseMySQL("Server=localhost;Database=ef_tasks;User=root;Password=12345678;") );
Al momento de acceder al endpoint me da el siguiente error: "Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1] An unhandled exception has occurred while executing the request. System.MissingMethodException: Method not found: 'System.String Microsoft.EntityFrameworkCore.Diagnostics.RelationalStrings.get_NoConnectionOrConnectionString()'."
Vi muchos comentarios sobre el conexion string de SqlServer para autenticar con windows y como ninguno me sirvio abri el "Visual Studio" IDE y me fije en el SQLObjectExplorer y obtuve directametne de ahi la cadena y esto fue lo que me dio
"Data Source=SERVERNAME;Initial Catalog=TasksDB; Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False");"
El server name seria el que indica el profesor y yo agregue el Initial Catalog=TasksDB; porque no viene, el profesor esta usando TareasDb.
Graciaaaas!!!! Al fin me resultó pipipi.
Me salvaste, gracias
Nuevamente pregunto en que momento explicaron como descargar/instalar SQL Server, se que este no es un curso de SQL, pero creo que lo mínimo es que expliquen como se instalan todos las herramientas que se van a ocupar en el curso y no solo dar por hecho que el alumno ya lo sabe
Opino lo mismo, pero la cuestión es que al inicio pide unos prerrequisitos y entre ellos está el tema de SQL Server, es como si alguien dijera "En que momento instalo Visual Studio Code o Postman".
https://www.connectionstrings.com
En esta pagina pueden encontrar diferentes connection strings, para diferentes lenguajes y tecnologias. Espero les sea de utilidad, con esta pude encontrar la conexion para utilizar en el caso de postgresSQL.
Para postgres, en el archivo appsettings.json, hice la configuración de la conexión hacia la base de datos.
"ConnectionStrings": { "PostgresSQLConnection": "Server= 127.0.0.1; Port=5432; Database=TareasDB; User Id=postgres; Password=postgres" }
Luego en Program.cs se realiza la configuración usando la conexión creada :
builder.Services.AddNpgsql<TareasContext>(builder.Configuration.GetConnectionString("PostgresSQLConnection"));
Genial tu configuracion me sirvio, Gracias!...
Me funcionó! Muchas gracias.
En mi caso, octubre de 2025, decidí usar Docker, ya que lo otro no logre una instalación exitosa
para el archivo docker-compose.yml
version: '3.8' services: sqlserver: container_name: sqlserver image: mcr.microsoft.com/mssql/server:2022-latest environment: ACCEPT_EULA: "Y" MSSQL_PID: "Developer" SA_PASSWORD: "MySecret123!" ports: - "1433:1433" restart: unless-stopped adminer: container_name: adminer image: adminer:latest ports: - "8080:8080" restart: unless-stopped depends_on: - sqlserver
La parte del adminer es para no estar manejando ese programas de SQL Server Management Studio y tener una versión ligera en el navegador.
Use las siguientes credenciales:
System: MS SQL (beta) Server: sqlserver (mantén este) Username: SA (mantén este) Password: MySecret123! (asegúrate de poner la contraseña) Database: TareasDB (o déjalo vacío)
Y modifique el archivo Program.cs
using Microsoft.EntityFrameworkCore; using projectef; var builder = WebApplication.CreateBuilder(args); builder.Services.AddDbContext<TaskContext>(options => { options.UseSqlServer("Server=localhost,1433;Database=TareasDB;User Id=SA;Password=MySecret123!;TrustServerCertificate=true;MultipleActiveResultSets=true"); }); var app = builder.Build(); app.MapGet("/", () => "Hello World!"); app.MapGet("/dbConnection", async (TaskContext dbContext) => { try { // Obtener el nombre de la base de datos var databaseName = dbContext.Database.GetDbConnection().Database; // Verificar si la base de datos fue creada o ya existía var wasCreated = await dbContext.Database.EnsureCreatedAsync(); var message = wasCreated ? $"Base de datos '{databaseName}' creada exitosamente" : $"Base de datos '{databaseName}' ya existe y está lista"; return Results.Ok(new { success = true, databaseName = databaseName, wasCreated = wasCreated, message = message, timestamp = DateTime.Now }); } catch (Exception ex) { return Results.Problem($"Error: {ex.Message}"); } }); app.Run();
Lo demás fue apoyo con Winsurf.
por último revisen bien el código, ya que modifique algunas palabras para que están en inglés.
A alguien le arroja este error, estoy realizando el proyecto desde wsl v2, con ubuntu 20.04
Que motor de base de datos estas usando? revisas que si tengas bnien configurado usario y contraseña.
Estoy usando Oracle y cuando voy a Postman y ejecuto el get al endpoint
http://localhost:5129/dbconexion"
no sucede nada, es decir, no obtengo un error pero no se crean las tablas, en cambio, cuando desde la terminal de Visual Studio Code ejecuto
dotnet ef database update
Las tablas son creadas correctamente.
¿Por qué no puedo realizar la prueba con Postman?
Por favor puedes compartir el código que se ejecuta al llamar dbConexion? oracle es una bas de datos demasiado robusta y no estoy seguro que puede necesitar alguna configuración especial.
cual seria la diferencia entre AddDbContext y AddSqlServer? teniendo en cuenta que para utilizar sql server lo puedo cambiar dentro de la expresión lampad
AddSqlServer es un servicio hecho especificamente para SQL server esa es la unica diferencia.
Hola, Yo tambien creo que desde la funcionalidad: AddDbContext es para mapear las clases, y llevarlas como contexto a tablas, y atributos en Memoria. AddSqlServer es para mapear las clases, y llevarlas como contexto a tablas, y atributos en SQL Server, lo que permite gestionar la base de datos concreta desde SSMS
Alguno de ustedes pudo hacer la conexion con postgreSQL?
No me deja conectar
¡Hola! :D
¿Cuál es el problema que tienes?, ¿en qué te puedo ayudar? Compártenos el error. Puedes adjuntar imágenes arrastrándolas a esta ventana de comentario.
Nunca pares de aprender 💚
Cuando utilices PostreSQL debes instalar los nuget que correspondan con ese motor de BD y al instanciar el método debes usar AddNpgsql en lugar de AddSqlServer.
Espeto haber ayudado, saludos
Como se puede hacer para que en la BD se almacene en DataTime o en Date... y no en datetime2??
en fluent API debe especificar el type de la base datos usando el método: .HasColumnType("datetime2");