67 lines
3.0 KiB
C#
67 lines
3.0 KiB
C#
using System.Text.Json;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.EntityFrameworkCore.ChangeTracking;
|
|
using ZeroSpace.Model;
|
|
|
|
namespace ZeroSpace.ApiService.Data;
|
|
|
|
public class ZeroSpaceDbContext : DbContext
|
|
{
|
|
public ZeroSpaceDbContext(DbContextOptions<ZeroSpaceDbContext> options) : base(options)
|
|
{
|
|
}
|
|
|
|
public DbSet<UnitData> Units => Set<UnitData>();
|
|
|
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
|
{
|
|
base.OnModelCreating(modelBuilder);
|
|
|
|
modelBuilder.Entity<UnitData>(entity =>
|
|
{
|
|
entity.ToTable("units");
|
|
entity.HasKey(e => e.Id);
|
|
|
|
entity.Property(e => e.Id).HasColumnName("id").HasMaxLength(100);
|
|
entity.Property(e => e.Name).HasColumnName("name").IsRequired().HasMaxLength(200);
|
|
entity.Property(e => e.Hexite).HasColumnName("hexite");
|
|
entity.Property(e => e.Flux).HasColumnName("flux");
|
|
entity.Property(e => e.Supply).HasColumnName("supply");
|
|
entity.Property(e => e.ProductionTime).HasColumnName("production_time");
|
|
entity.Property(e => e.Health).HasColumnName("health");
|
|
entity.Property(e => e.Energy).HasColumnName("energy");
|
|
entity.Property(e => e.Shields).HasColumnName("shields");
|
|
entity.Property(e => e.ArmorRating).HasColumnName("armor_rating");
|
|
entity.Property(e => e.MovementSpeed).HasColumnName("movement_speed");
|
|
entity.Property(e => e.DamagePerSecond).HasColumnName("damage_per_second");
|
|
entity.Property(e => e.AttackRange).HasColumnName("attack_range");
|
|
entity.Property(e => e.Tier).HasColumnName("tier");
|
|
entity.Property(e => e.Faction).HasColumnName("faction").IsRequired().HasMaxLength(100);
|
|
entity.Property(e => e.Hotkey).HasColumnName("hotkey").HasMaxLength(20);
|
|
entity.Property(e => e.BuildAtSameTime).HasColumnName("build_at_same_time");
|
|
entity.Property(e => e.Limit).HasColumnName("limit");
|
|
|
|
var valueComparer = new ValueComparer<IReadOnlyList<string>>(
|
|
(c1, c2) => (c1 == null && c2 == null) || (c1 != null && c2 != null && c1.SequenceEqual(c2)),
|
|
c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())),
|
|
c => c.ToList()
|
|
);
|
|
|
|
entity.Property(e => e.Attributes)
|
|
.HasColumnName("attributes")
|
|
.HasConversion(
|
|
v => JsonSerializer.Serialize(v, (JsonSerializerOptions?)null),
|
|
v => (IReadOnlyList<string>)(JsonSerializer.Deserialize<List<string>>(v, (JsonSerializerOptions?)null) ?? new List<string>())
|
|
)
|
|
.Metadata.SetValueComparer(valueComparer);
|
|
|
|
entity.Ignore(e => e.DpsPerHexite);
|
|
entity.Ignore(e => e.DpsPerFlux);
|
|
entity.Ignore(e => e.DpsPerTotalCost);
|
|
entity.Ignore(e => e.HealthPerHexite);
|
|
entity.Ignore(e => e.HealthPerFlux);
|
|
entity.Ignore(e => e.HealthPerTotalCost);
|
|
});
|
|
}
|
|
}
|