Este post es un poco diferente a los que habitualmente se tienen aqui. Ahora vamos a realizar una guia rápida para preparar el desarrollo de una aplicación web MVC en NetCore con Conexion a PostgresSql via EntityFramework.
Requisitos
Instalar o actualizar la herramientas de Entity Framework
dotnet tool install --global dotnet-ef
dotnet tool update --global dotnet-ef
Instalar o actualizar la herramienta de scaffolding:
dotnet tool install --global dotnet-aspnet-codegenerator
dotnet tool update --global dotnet-aspnet-codegenerator
Añadimos el certificado SSL en el PATH del proyecto
dotnet dev-certs https --trust
Inicio del proyecto
Añadir los paquetes Nuget:
-
Npgsql
-
Microsoft.EntityFrameworkCore
-
Microsoft.EntityFrameworkCore.SqlServer.
-
Npgsql.EntityFrameworkCore.PostgreSQL
-
Microsoft.VisualStudio.Web.CodeGeneration.Design
-
Microsoft.EntityFrameworkCore.Tools
-
Microsoft.AspNetCore.Identity.UI
Después de añadir las referencias del proyecto, se debe ejecutar un BUILD.
Ahora se puede crear los modelos con la herramienta dotnet ef, desde linea de comandos, desde el PATH de la solución:
dotnet ef dbcontext scaffold "Host=localhost;Database=*NOMBRE_BD*;Username=*USUARIO_BD*;Password=*PASSWORD_BD*" Npgsql.EntityFrameworkCore.PostgreSQL -o Models -c ReAlDbContext --context-dir . --no-build --force --startup-project *NOMBRE_PROYECTO*
En el archivo appsettings.json, se debe añadir el segmento “ConnectionStrings”:
{
"ConnectionStrings": {
"DataAccessPostgreSqlProvider": "User ID=*USUARIO_BD*;Password=*PASSWORD_BD*;Host=localhost;Port=5432;Database=*NOMBRE_BD*;Pooling=true;"
},
[.....]
}
En el archivo Startup.cs, modificar el método ConfigureServices:
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// [ReAl] Usar una base de datos PostgreSQL
var sqlConnectionString = Configuration.GetConnectionString("DataAccessPostgreSqlProvider");
services.AddDbContext<ReAlDbContext>(options =>
options.UseNpgsql(
sqlConnectionString,
b => b.MigrationsAssembly(typeof(ReAlDbContext).Assembly.FullName)
)
);
// [ReAl] Para acceder al archivo de configuracion
services.AddSingleton<IConfiguration>(Configuration);
services.AddControllersWithViews();
}
Ahora ya se puede crear las paginas para los ABMs (CRUD) con la creación automática (scaffolding) de los CONTROLLERS, realizados a partir de los MODELOS:
dotnet aspnet-codegenerator controller --project . --force --controllerName *NOMBRE_TABLA_Controller* --model *NAMESPACE_MODELO*.*NOMBRE_MODELO* --dataContext ReAlDbContext --relativeFolderPath .\Controllers\ --useDefaultLayout --referenceScriptLibraries
Tambien se puede crear solo vistas (Empty | Create | Edit | Delete | Details | List): |
dotnet aspnet-codegenerator view myDetails Details -outDir Views/*NOMBRE_TABLA* --project . --model *NAMESPACE_MODELO*.*NOMBRE_MODELO* --dataContext ReAlDbContext --useDefaultLayout --referenceScriptLibraries --force
Y por ultimo, si se ve necesario reconstruir un modelo, se puede usar:
dotnet ef dbcontext scaffold "Host=localhost;Database=*NOMBRE_BD*;Username=*USUARIO_BD*;Password=*PASSWORD_BD*" Npgsql.EntityFrameworkCore.PostgreSQL -o Models -c ReAlDbContext_new --context-dir . --no-build --force -t enc_informantes
Personalizando el Scaffolding
Se puede crear los propios templates creando la carpeta Templates y añadiendo el siguiente fragmento al archivo csproj
<ItemGroup>
<Content Update="appsettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Remove="Templates\**">
</Content>
</ItemGroup>
Se puede copiar los templates originales desde:
C:\Users\{USUARIO}\.nuget\packages\microsoft.visualstudio.web.codegenerators.mvc\3.1.1\Templates
Y a partir de alli, modificarlos según necesidad