using System.Reflection; using Core.Entities; using Core.Entities.OrderAggregate; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace Infrastructure.Data { public class StoreContext : DbContext { public StoreContext(DbContextOptions options) : base(options) { } public DbSet Products { get; set; } public DbSet ProductBrands { get; set; } public DbSet ProductTypes { get; set; } public DbSet Orders { get; set; } public DbSet OrderItems { get; set; } public DbSet DeliveryMethod { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly()); if(Database.ProviderName == "Microsoft.EntityFrameworkCore.Sqlite") { foreach (var entityType in modelBuilder.Model.GetEntityTypes()) { var properties = entityType.ClrType.GetProperties().Where(p => p.PropertyType == typeof(decimal)); var dateTimeProperties = entityType.ClrType.GetProperties().Where(p => p.PropertyType == typeof(DateTimeOffset)); foreach (var property in properties) { modelBuilder.Entity(entityType.Name).Property(property.Name).HasConversion(); } foreach (var property in dateTimeProperties) { modelBuilder.Entity(entityType.Name).Property(property.Name).HasConversion(new DateTimeOffsetToBinaryConverter()); } } } } } }