using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.Json; using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using Microsoft.Extensions.Localization; using Props.Models; using Props.Models.Search; using Props.Models.User; using Props.Shop.Framework; namespace Props.Data { public class ApplicationDbContext : IdentityDbContext { public DbSet QueryWords { get; set; } public DbSet ProductListingInfos { get; set; } public ApplicationDbContext(DbContextOptions options) : base(options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity() .Property(e => e.Order) .HasConversion( v => JsonSerializer.Serialize(v, null), v => JsonSerializer.Deserialize>(v, null), new ValueComparer>( (a, b) => a.SequenceEqual(b), c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())), c => (IList)c.ToList() ) ); modelBuilder.Entity() .Property(e => e.DisabledShops) .HasConversion( v => JsonSerializer.Serialize(v, null), v => JsonSerializer.Deserialize(v, null), new ValueComparer( (a, b) => a.Equals(b), c => c.GetHashCode(), c => new SearchOutline.ShopSelector(c) ) ); modelBuilder.Entity() .Property(e => e.Filters) .HasConversion( v => JsonSerializer.Serialize(v, null), v => JsonSerializer.Deserialize(v, null), new ValueComparer( (a, b) => a.Equals(b), c => c.GetHashCode(), c => c.Copy() ) ); modelBuilder.Entity() .Property(e => e.ProductListing) .HasConversion( v => JsonSerializer.Serialize(v, null), v => JsonSerializer.Deserialize(v, null), new ValueComparer( (a, b) => a.Equals(b), c => c.GetHashCode(), c => c.Copy() ) ); } } }