Hola amigos, en este caso me encontraba trabajando con un proyecto en Visual Studio 2022 que tengo divido diversas capas, una es la Data Access Layer (DAL) o capa d de acceso a datos, dicha capa es la encargada de manejar el contexto para Entity Framework Core.
El problema es que tengo un connection string para local y otro para Release que a su vez se obtiene desde otro proyecto (Web API), el código es el siguiente:
public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<ApplicationDbContext>
{
public ApplicationDbContext CreateDbContext(string[] args)
{
bool isDevelopment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Development";
var connectionStringDev = "/../DiarioWebAPI/appsettings.json";
var connectionStringRelease = "/../DiarioWebAPI/appsettings.Release.json";
var connection = isDevelopment ? connectionStringDev : connectionStringRelease;
IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile(@Directory.GetCurrentDirectory() + connection).Build();
var builder = new DbContextOptionsBuilder<ApplicationDbContext>();
var connectionString = configuration.GetSection("ConnectionStrings")["defaultConnection"];
builder.UseSqlServer(connectionString);
return new ApplicationDbContext(builder.Options);
}
}
Como podemos ver, dependiendo el valor de [ASPNETCORE_ENVIRONMENT] tomara la configuración de uno u otro archivo, al hacer un despliegue o publish, esta variable se puede establecer muy fácilmente, sin embargo, no sabía cómo realizarlo en la Package Manager Console, lo cual simplemente se resuelve ejecutando el siguiente comando, sea para development, production etc:
Hola amigos, en esta ocasión tengo la necesidad de copiar un respaldo de una base de datos de SQL Server que se encuentra en un contenedor de Docker a mi VPS que es un SO Ubuntu 23.04
Como podemos ver, tengo un solo contenedor haciendo uso del comando:
$ docker ps
Anteriormente accedí al path donde copiaré mi archivo e hice un ls para ver que efectivamente esta vacío.
Luego usando un comando como el siguiente, podemos copiar de una ruta del contedor a una local.
Hola amigos, en esta ocasión me encontraba agregando un proyecto de angular a mi solución en Visual Studio 2022 que contenía otros proyectos como una Web API y biblioteca de clases, al instalar Node JS y Angular y hacer un BUILD inicial a mi proyecto de Angular desde VS, me mostró el siguiente error:
«npm» no se reconoce como un comando interno o externo.
Por lo cual googleando lo resolví de la siguiente manera en Windows 11:
Ir a Configuración > Sistema > Configuración avanzada del sistema
Nos vamos a la pestaña Opciones avanzadas y al final viene la opción «Variables de Entorno»
Nos vamos a la opción de Path y le damos editar, añadimos una Nueva línea con el siguiente dato que es la ruta de instalación de nodejs:
C:\Archivos de programa\nodejs\
Y nos quedará algo como esto:
Ahora guardamos todos los cambios y tu proyecto se ejecutará sin problemas, es recomendable reiniciar, pero a mí me funcionó sin reiniciar mi equipo.
Hola en este tutorial dividido en diferentes partes aprenderás como implementar una aplicación de web api con C# de manera sencilla y rápida.
La web API consiste en crear un servicio de consulta por código postal de la república mexicana para obtener información de colonias, municipios, estado, ciudad etcétera.
Algunos de los temas que veremos.
Web API
SQL Managmente Studio
Importación masiva de datos con SQL MS
PostMan
Data Annotations
Seguridad con Json Web Tokens (JWT).
Importando información de un XLS a la base de datos
Hay muchas maneras de importar data, en este caso usaremos la herramienta nativa de SQL Managment.
Nos dirigimos a nuestro SQL Management Studio y seleccionamos nuestra base de datos y damos clic derecho y nos luego a Task/Tareas, finalmente damos click en Import data, se nos abrirá la siguiente ventana con una serie de pasos.
En la primer ventana donde seleccionamos el origen de datos buscamos Microsoft Excel y seleccionamos nuestro archivo, la versión la dejamos en 2003.
En la siguiente ventana seleccionaremos el destino el cual será SQL Server Native Client.
El siguiente venta a configurar tendremos que mapear la hoja de excel de nuestra tabla ya creada, tengan cuidado por que en la columna destino les tratará de crear una nueva tabla como se llama la hoja de excel, le daremos en editar asignaciones para mapear los campos.
Le damos siguiente y dejamos todo por default hasta llegar el final y si todo sale bien no generará ningún error.
La inserción es demasiada rápida, no debería tardar más de 5 segundos
Creando nuestro controlador
Vamos a dirigirnos a la carpeta Controllers y daremos click derecho -> Agregar controlador
Nos vamos a Común -> API y seleccionamos: Controlador de API con acciones que usan Entity Framework
Seleccionamos los siguientes parámetros y renombramos el controlador a CodigosPostalesController
y le damos en agregar y nos creara un archivo con todos los verbos/métodos.
Probando el controlador
Agregamos un registro de prueba en nuestra tabla, luego volvemos a nuestro visual studio e iniciamos la depuración, probamos la url de nuestro api
/api/CodigosPostales
Como podemos ver ya nos esta regresando nuestra información.
Probando en Postman
Abrimos nuestra aplicación y agregamos una nueva colección para las futuras pruebas que estaremos realizando.
Agregamos una nueva solicitud, Add Request, basta poner el método GET y la url.
Seguridad
El paso siguiente será añadir seguridad a nuestra web api con JWT Tokens
Hola en este tutorial dividido en diferentes partes aprenderás como implementar una aplicación de web api con C# de manera sencilla y rápida.
La web API consiste en crear un servicio de consulta por código postal de la república mexicana para obtener información de colonias, municipios, estado, ciudad etcétera.
Algunos de los temas que veremos.
Web API
SQL Managmente Studio
Importación masiva de datos con SQL MS
PostMan
Data Annotations
Seguridad con Json Web Tokens (JWT).
Descargar XLS SEPOMEX
Descargaremos el archivo xls donde se encuentran todos los códigos postales de la republica mexicana, podemos escoger por estado en especifico o descargar todos https://www.correosdemexico.gob.mx/SSLServicios/ConsultaCP/CodigoPostal_Exportar.aspx
Una vez descargado el archivo podemos ver que tiene múltiples columnas, dependiendo el proyecto podemos usar todas, en nuestro caso solo usaremos algunas.
Creando el Modelo
Del archivo xls solo utilizaremos las primeras columnas y las propiedades las nombraremos con nombres más amigables.
Creamos un folder llamado Models
Creamos una clase modelo llamada CodigosPostalesModel y añadimos el siguiente código.
Usaremos Data Annotations para los atributos que forzaran algunas propiedades también la clave primaria.
public class CodigosPostalesModel
{
[Key]
public int CodigoPostalId { get; set; }
[Required]
public string CodigoPostal { get; set; }
[Required]
public string Asentamiento { get; set; }
public string Municipio { get; set; }
[Required]
public string Estado { get; set; }
public string Ciudad { get; set; }
}
Creando la DAL (Data Access Layer)
Ahora necesitamos crear nuestra base de datos y en C# crear la capa de acceso de datos que es el contexto para crear las entidades de SQL a C#.
Abrimos SQL Managment y creamos nuestra base de datos llamada: ApiSepomex
En nuestro visual studio nos vamos al menú herramientas > Administrador de paquetes NuGet > Administrar paquetes NuGet para la solución, se nos abrirá una ventana en la cual podemos buscar paquetes, agregamos los paquetes NuGet:
Creamos una carpeta en la raíz de nuestro proyecto y la nombramos como DAL
Para crear el contexto añadimos una clase llamada CodigosPostalesContext
Añadimos las referencias de EntityFramework y nuestra clase modelo con las siguientes dependencias, podemos eliminar las que no necesitemos.
using Microsoft.EntityFrameworkCore;
using TodoApi.Models;
Añadimos el siguiente código el cual es el constructor del contexto con inyección de dependencias y añadimos el DbSet como propiedad para nuestra entidad, al añadir esta propiedad al ejecutar nuestro comando de migración, creará dicha tabla.
public CodigosPostalesContext(DbContextOptions<CodigosPostalesContext> options) : base(options)
{
}
public DbSet<CodigosPostalesModel> CodigosPostales { get; set; }
Quitamos todos los using innecesarios
Haciendo inyección de dependencias
Abrimos el archivo Startup.cs y añadimos la siguiente linea en nuestro método ConfigureServices
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<CodigosPostalesContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddControllers();
}
Lo anterior especifica que tendremos acceso en toda nuestra aplicación y además estamos especificando que usaremos SQL Server y pasamos la cadena de conexión, dicha cadena se encuentra en la configuración de app en formato json el cual la tenemos que especificar.
Abrimos el archivo appsettings.json y añadimos la siguiente linea
Ahora ejecutamos el primer comando el cual creará la migración inicial y servirá para crear todos los modelos y configuraciones que hemos especificado
Add-Migration InitialCreate
Hasta este punto, aún no se crean las tablas en nuestra base de datos, para eso tendremos que actualizarla con el comando siguiente:
Update-Database
Y bueno, hasta este punto ya tenemos la primer parte para nuestra web api, en la siguiente parte haremos la inserción masiva de datos y también haremos las primeras consultas web api mediante nuestro controlador Postman.