No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de ASP.NET Core

Curso de ASP.NET Core

Juan Carlos Ruiz

Juan Carlos Ruiz

Usando una Base de Datos de verdad

31/35
Recursos

Aportes 35

Preguntas 15

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Para aquellos que no tienen la posibilidad de usar Azure por el tema de la tarjeta de crédito, mi recomendación está en usar SQL Server en local.

  1. Descargan el SQL Server aquí: https://www.microsoft.com/en-us/sql-server/sql-server-downloads
    Pueden elegir entre Developer Edition (es gratis) o el Express que también es gratis, recomendado para este tipo de proyectos.
  2. Descargan el Microsoft SQL Server Management Studio 2019: https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver15
    Esto equivale al “MySQL Workbench” o al “Dbeaver”, es un gestor para bases de datos, así visualizas las tablas y todo lo demás.

En el código, en la parte donde se pone la conexión, es diferente al que pone el profesor, pues él se conecta para un servidor en la nube básicamente. Mi solución fue esta:


"ConnectionStrings": {
     "DefaultConnectionString": "Data Source=SERVIDOR;Initial Catalog=NOMBREBASEDEDATO;Integrated Security=true"
   }


El comando para copiar y pegar en el terminal es este:

dotnet add package Microsoft.EntityFrameworkCore.SqlServer

Algo importante que comentar, y es algo que aprendí por experiencia (en el trabajo).

Cuando se modifica el archivo .gitignore para poder evitar que se suban archivos, pero en el caso del profe, eliminar uno que ya se había subido.

No basta sólo con editar el archivo .gitignore, tambien se deben ejecutar estos comandos en la consola de git:

git rm -r --cached .
git add .
git commit -m ".gitignore isnow working"
git push

Que chimbo que para crear una cuenta gratuita en azure se deba de colocar tarjeta de crédito, una limitante, o hare con el gestor Sql server 2014, por el curso excelente

Para los que recién estén haciendo el curso con net core 6
me funciono usando

string connString = builder.Configuration.GetConnectionString("DefaultConnectionString");
builder.Services.AddDbContext<SchoolContext>(options => options.UseSqlServer(connString));

Les comparto la configuración por si gustan hacerlo con MySQL:

En el archivo [ appsettings.Development.json ]

{
  
  "ConnectionStrings": {
    "DefaultConnectionstring": "Server=localhost;Port=8889;Database=platzi;Uid=root;Pwd=root"
  },
  
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}

En el archivo [ startup.cs ]

public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews();
            /*services.AddDbContext<EscuelaContext>(
                options => options.UseInMemoryDatabase(databaseName:"testDB")
                );*/
            
            string connString = ConfigurationExtensions.GetConnectionString(this.Configuration, "DefaultConnectionstring");
            services.AddDbContext<EscuelaContext>(
            options => options.UseMySQL(connString)
            );
        }

Es muy interesante porque solo tuve que crear la base de datos con el nombre platzi y al compilar el proyecto se crean las tablas en automático junto con el llenado de la informaciòn que previamente ya realizamos.

Estuve siguiendo el curso y tuve problemas con las versiones para iniciar el proyecto cuando instale SqlServer, en mi caso se soluciono cuando al comando para agregar el package le agregue el flag “-v 2.1.4”

Me aparece el siguiente error:
SqlException: Invalid object name ‘Escuelas’.

Una alternativa para la base de datos es creandola mediante docker

docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=MiContr4$3ña5egura!' -p 1433:1433 -d mcr.microsoft.com/mssql/server:2017-latest

Y luego configurar la DefaultConnectionString así:

  "ConnectionStrings":{ "DefaultConnectionString": "Server=localhost;Database=MiBaseDeDatos;User Id=sa;Password=MiContr4$3ña5egura!;"
  }

Tuve el mismo inconveniente que @alexanderarmua, también lo solucioné incrementando la versión del package. El comando completo quedaría asi:

dotnet add package Microsoft.EntityFrameworkCore.SqlServer -v 2.1.4

una pregunta si las tablas tienen diferente nombre como es que intuye que pertenece al modelo…

No pude crear una base de datos SQL sin tener que pagar, usare localhost (que bueno que habia visto el curso de bases de datos antes de este jeje)

Como buena practica, todas las tablas son plurales. cuando haces el DbSet en el DbContext y todos los modelos son singulares.

Tambien se puede conectar con la siguiente linea:

builder.Services.AddSqlServer<EscuelaContext>(builder.Configuration.GetConnectionString(“EscuelaDb”));

Bueno, pero que pasa si ahora que estoy usando ya una base de datos persitida, quiero hacer algún cambio en mi modelo de datos, suponiendo que estoy trabajando en un proyecto que va incluyendo cambios incrementales al sistema?
Si agrego o modifico campos en mi modelo o si llego a agregar nuevos modelos, como me aseguro de que esos cambios se reflejan en mi bd. Y si trabajo en un entorno de desarrollo/pruebas, como hago para reflejar los cambios cuando esos entren a producción? 😳

Para realizar una migración o iniciar con una BD en blanco se puederealizar lo siguiente

    dotnet add package Microsoft.EntityFrameworkCore.Design
    dotnet tool install --global dotnet-ef
    dotnet ef migrations add "descripcion o nombre de migracion" -o Data/Migrations  (-o carpeta destino)
    dotnet ef database update

No se si fue solo a mi pero en Azure no vi un plan gratuito para la DB por más recursos mínimos que le puse.

Sugiero enseñen a installar Docker o cualquier Gestor Express segun el hardware del cliente asi como se hizo para Visual Studio Code.

    "ConnStringDefault": "Data Source=CHANDRA;Initial Catalog=CursoPlatzi;Integrated Security=true"```
Con sql server express

Yo estoy en linux y no pude por ahora sacar la cuenta gratuita de Azure pero no tuve problemas ya que pude usar MSSQL Server en localhost con la version Developer de SqlServer 2017.

https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-ubuntu?view=sql-server-2017

Solo instalé la DBMS(el engine principal), sqlcmd y cree una database desde la terminal, para solo agregar la conección al string en Startup y appsettings.

dotnet add package Microsoft.EntityFrameworkCore.SqlServer

La cadena de conexión llega en null, ya recompile y nada

conString = ConfigurationExtensions.GetConnectionString(this.Configuration, "DefaultConnectionString");```

Se totea por el valor de null
por que puede pasar esto?

les recomiendo usar SQLite si no quieren complicarse la vida.

💪🏽

CLI de .NET Core

dotnet add package provider_package_name```

PowerShell 

install-package provider_package_name


C# 

optionsBuilder.UseSqlServer(
“Server=(localdb)\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;”);


Utilizando PostgreSQL

string connString =  ConfigurationExtensions.GetConnectionString(this.Configuration,"DefaultConnection");

            services.AddDbContext<EscuelaContext>(
                options => options.UseNpgsql(connString)
            );

No pude crear la cuenta gratuita ya que requiere una tarjeta de crédito.
¿Alguna alternativa? gracias.

Interesante

comandos y mas comandos.

En mi caso las clases heredaban el atributo UniqueId y fue necesario renombrarlo a Id para continuar con la convención y evitar un problema de HasNoKey.

Comparto mi cadena de conexión para una instancia local sin requerir contraseña (trusted connection):

  "ConnectionStrings":
  {    
    "DefaultConnectionString":"Server=DESKTOP-6S87MT2\\SQLEXPRESS;Database=netCoreTest;Trusted_Connection=True;MultipleActiveResultSets=true"
  },

Para los que tienen problema con la tarjeta de crédito la mejor solución es Nequi. Allí pueden abrir una tarjeta virtual por muy poco dinero y les soluciona muchos problemas 😄

Puedo subir mi sitio web a Azure usando una base de datos local?

pues perdí mi tarjeta antes de venir aquí so me salto la clase >:l
igual la tarjeta es sólo para validar identidad

Al ejecutar con la conexion de mi base de datos local SQLServer , se creo automaticamente la base de datos y tablas. 🙉

Para las últimas versiones de ASP .NET Core es necesario agregar un par de líneas de código en el archivo Startup.cs para que la aplicación se conecte sin que presente este error:

Se produjo una excepción de tipo ‘System.InvalidOperationException’ en Microsoft.AspNetCore.Authorization.Policy.dll pero no se controló en el código del usuario: ‘Unable to find the required services. Please add all the required services by calling ‘IServiceCollection.AddAuthorization’ inside the call to ‘ConfigureServices(…)’ in the application startup code.’
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

public void ConfigureServices(IServiceCollection services)
{
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0); //Esta compatibilidad no viene seteada

string connString = ConfigurationExtensions.GetConnectionString(this.Configuration, "DefaultConnectionString");
            
services.AddDbContext<EscuelaContext>(
                    options => options.UseSqlServer(connString)
       );
}