using System.Text.Json; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.Extensions.Options; using MyLibraryEntities; namespace MyLibraryDB; public class MyLibraryContext : DbContext { public DbSet Authors { get; set; } public DbSet Books { get; set; } public DbSet Works { get; set; } public MyLibraryContext() { } public MyLibraryContext(DbContextOptions options) : base(options) { } private static DbContextOptions InitPlaftormDB(string dbPlatformPath) { var options = new DbContextOptionsBuilder() .UseMySql($"{dbPlatformPath}", new MySqlServerVersion(new Version(10, 11, 1))) .Options; return options; } public MyLibraryContext(string dbPlatformPath) : this(InitPlaftormDB(dbPlatformPath)) { } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { optionsBuilder.UseSqlite($"Data Source=MylibraryDB.db"); } } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity() .Property(e => e.AlternateNames) .HasConversion( v => JsonSerializer.Serialize(v, (JsonSerializerOptions)null), v => JsonSerializer.Deserialize>(v, (JsonSerializerOptions)null), new ValueComparer>( (c1, c2) => c1.SequenceEqual(c2), c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())), c => (ICollection)c.ToList())); modelBuilder.Entity() .Property(e => e.Subjects) .HasConversion( v => JsonSerializer.Serialize(v, (JsonSerializerOptions)null), v => JsonSerializer.Deserialize>(v, (JsonSerializerOptions)null), new ValueComparer>( (c1, c2) => c1.SequenceEqual(c2), c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())), c => (ICollection)c.ToList())); modelBuilder.Entity() .Property(e => e.Publishers) .HasConversion( v => JsonSerializer.Serialize(v, (JsonSerializerOptions)null), v => JsonSerializer.Deserialize>(v, (JsonSerializerOptions)null), new ValueComparer>( (c1, c2) => c1.SequenceEqual(c2), c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())), c => (ICollection)c.ToList())); modelBuilder.Entity() .Property(e => e.Series) .HasConversion( v => JsonSerializer.Serialize(v, (JsonSerializerOptions)null), v => JsonSerializer.Deserialize>(v, (JsonSerializerOptions)null), new ValueComparer>( (c1, c2) => c1.SequenceEqual(c2), c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())), c => (ICollection)c.ToList())); } }