Files
ZeroSpace/ZeroSpace/ZeroSpace.ApiService/Data/ZeroSpaceDbContext.cs
T
2026-09-26 00:48:37 -04:00

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);
});
}
}