Init
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
using FinlyticAssets.Entities;
|
||||
using FinlyticCore.Entities.Assets;
|
||||
using FinlyticCore.Models.Assets;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.ChangeTracking;
|
||||
|
||||
namespace FinlyticAssets.Database;
|
||||
|
||||
public class AssetsDbContext : DbContext
|
||||
{
|
||||
public AssetsDbContext(DbContextOptions<AssetsDbContext> options) : base(options)
|
||||
{
|
||||
}
|
||||
|
||||
public DbSet<Settings> Settings { get; set; }
|
||||
public DbSet<AssetEntity> TradeRepublicAssets { get; set; }
|
||||
public DbSet<TagEntity> TradeRepublicTags { get; set; }
|
||||
|
||||
|
||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||
{
|
||||
modelBuilder.Entity<AssetEntity>(entity =>
|
||||
{
|
||||
entity.HasKey(e => new {e.Isin, e.InstrumentCategory});
|
||||
|
||||
entity.HasDiscriminator<string>("AssetType")
|
||||
.HasValue<StockEntity>("Stock")
|
||||
.HasValue<CryptoEntity>("Crypto")
|
||||
.HasValue<EtfEntity>("Etf")
|
||||
.HasValue<SyntheticEntity>("Synthetic")
|
||||
.HasValue<BondEntity>("Bond")
|
||||
.HasValue<DerivativeEntity>("Derivative");
|
||||
});
|
||||
|
||||
var stringListConverter =
|
||||
new Microsoft.EntityFrameworkCore.Storage.ValueConversion.ValueConverter<List<string>, string>(
|
||||
v => System.Text.Json.JsonSerializer.Serialize(v, (System.Text.Json.JsonSerializerOptions?)null),
|
||||
v => System.Text.Json.JsonSerializer.Deserialize<List<string>>(v,
|
||||
(System.Text.Json.JsonSerializerOptions?)null) ?? new List<string>()
|
||||
);
|
||||
|
||||
var stringListComparer = new ValueComparer<List<string>>(
|
||||
(c1, c2) => c1 != null && c2 != null ? c1.SequenceEqual(c2) : c1 == c2,
|
||||
c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())),
|
||||
c => c.ToList()
|
||||
);
|
||||
|
||||
modelBuilder.Entity<StockEntity>()
|
||||
.Property(e => e.DerivativeProductCategories)
|
||||
.HasConversion(stringListConverter, stringListComparer);
|
||||
|
||||
modelBuilder.Entity<SyntheticEntity>()
|
||||
.Property(e => e.DerivativeProductCategories)
|
||||
.HasConversion(stringListConverter, stringListComparer);
|
||||
|
||||
modelBuilder.Entity<DerivativeEntity>()
|
||||
.Property(e => e.DerivativeProductCategories)
|
||||
.HasConversion(stringListConverter, stringListComparer);
|
||||
|
||||
modelBuilder.Entity<EtfEntity>()
|
||||
.Property(e => e.DerivativeProductCategories)
|
||||
.HasConversion(stringListConverter, stringListComparer);
|
||||
|
||||
modelBuilder.Entity<TagEntity>(entity => { entity.HasKey(e => e.Id); });
|
||||
|
||||
modelBuilder.Entity<Settings>(entity =>
|
||||
{
|
||||
entity.HasKey(e => e.Id);
|
||||
|
||||
entity.Property(e => e.CurrentScanningType)
|
||||
.HasConversion<string>()
|
||||
.HasMaxLength(50);
|
||||
});
|
||||
|
||||
modelBuilder.Entity<AssetEntity>()
|
||||
.HasMany(a => a.Tags)
|
||||
.WithMany(t => t.Assets);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user