Configuración de Base de Datos 📦
Modelos
BaseEntity servirá como modelo base y este contará con un Id virtual el cual permitirá sobrescribirlo, adicionalmente para este caso colocaré las propiedades CreatedDate y ModifiedDate.
public class BaseEntity
{
public virtual int Id { get; set; }
public DateTime CreatedDate { get; set; }
public DateTime ModifiedDate { get; set; }
}
Crearemos un modelo correspondiente a la Imagen de Perfil, esta heredará de BaseEntity.
public class ProfilePicture : BaseEntity
{
public byte[] Picture { get; set; }
}
Contexto de la Base de Datos
Crea una nueva clase que heredará de DbContext, en esta clase agregaremos una propiedad del tipo DbSet<Modelo>.
He colocado el código necesario para almacenar la Fecha y Hora de Creación del registro, así como el de Actualización, esto se logra al sobrescribir los métodos SaveChanges y SaveChangesAsync. Puedes encontrar más información en el siguiente enlace.
public class PictureToSQLDbContext : DbContext
{
public PictureToSQLDbContext([NotNullAttribute] DbContextOptions<PictureToSQLDbContext> options) : base(options)
{
}
private void AddTimestamps()
{
var entries = ChangeTracker
.Entries()
.Where(e => e.Entity is BaseEntity && (
e.State == EntityState.Added
|| e.State == EntityState.Modified));
foreach (var entityEntry in entries)
{
((BaseEntity)entityEntry.Entity).ModifiedDate = DateTime.Now;
if (entityEntry.State == EntityState.Added)
{
((BaseEntity)entityEntry.Entity).CreatedDate = DateTime.Now;
}
}
}
public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken = default)
{
AddTimestamps();
return await base.SaveChangesAsync(cancellationToken);
}
public override int SaveChanges()
{
AddTimestamps();
return base.SaveChanges();
}
public DbSet<ProfilePicture> ProfilePictures { get; set; }
}
ConnectionString
Ubica el archivo appsettings.json, crearemos una nueva sección para agregarar los datos del ConnectionString para acceder a la base de datos.
{
"ConnectionStrings": {
"DefaultConnection": "Server=DESKTOP-TEST; Database=PictureToSQL; Trusted_Connection=true;"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
Agregar DbContext a la configuración de Servicios
En el archivo Startup.cs se debe agregar en el método ConfigureServices el uso del DbContext, usualmente lo agrego como primera instrucción, adicionalmente se le indica que cadena de conexión usar.
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<PictureToSQLDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
// otros servicios configurados
}
Migración Inicial
Para realizar la primera migración, se hará uso de la herramienta de línea de comandos para Entity Framework.
dotnet ef migrations add InitialCreate --project .\PictureToSQL\
El comando anterior creará una carpeta llamada Migrations en el proyecto de Visual Studio. Contendrá las configuraciones necesarias para la creación de la base de datos y tablas que se han especificado en el DbContext.
Para crear la base de datos utiliza la siguiente instrucción, esta hará uso de las configuraciones en tu archivo appsettings.json
dotnet ef database update --project .\PictureToSQL\
Deja una respuesta