API Rest para almacenar imagen en base de datos con Entity Framework

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\

1 comentario

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.