92 lines
3.4 KiB
C#
92 lines
3.4 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using PetCompanion.Models;
|
|
|
|
namespace PetCompanion.Data
|
|
{
|
|
public class ApplicationDbContext : DbContext
|
|
{
|
|
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
|
|
{
|
|
}
|
|
|
|
public DbSet<Pet> Pets { get; set; }
|
|
public DbSet<PetStats> PetStats { get; set; }
|
|
public DbSet<Resources> Resources { get; set; }
|
|
public DbSet<Skill> Skills { get; set; }
|
|
public DbSet<SkillEffect> SkillEffects { get; set; }
|
|
public DbSet<PetSkill> PetSkills { get; set; }
|
|
public DbSet<GameItem> GameItems { get; set; }
|
|
public DbSet<Inventory> Inventories { get; set; }
|
|
public DbSet<EquippedItem> EquippedItems { get; set; }
|
|
public DbSet<ActionGathered> ActionGathered { get; set; }
|
|
|
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
|
{
|
|
base.OnModelCreating(modelBuilder);
|
|
|
|
// Configure DateTime properties to be stored as UTC
|
|
modelBuilder.Entity<Pet>()
|
|
.Property(p => p.GatherActionSince)
|
|
.HasConversion(
|
|
v => v.ToUniversalTime(),
|
|
v => DateTime.SpecifyKind(v, DateTimeKind.Utc));
|
|
|
|
modelBuilder.Entity<Pet>()
|
|
.Property(p => p.BasicActionCooldown)
|
|
.HasConversion(
|
|
v => v != DateTime.MinValue ? v.ToUniversalTime() : v,
|
|
v => v != DateTime.MinValue ? DateTime.SpecifyKind(v, DateTimeKind.Utc) : v);
|
|
|
|
modelBuilder.Entity<PetSkill>()
|
|
.HasOne(ps => ps.Pet)
|
|
.WithMany(p => p.Skills)
|
|
.HasForeignKey(ps => ps.PetId);
|
|
|
|
modelBuilder.Entity<PetSkill>()
|
|
.HasOne(ps => ps.Skill)
|
|
.WithMany(s => s.PetSkills)
|
|
.HasForeignKey(ps => ps.SkillId);
|
|
|
|
modelBuilder.Entity<SkillEffect>()
|
|
.HasOne(se => se.Skill)
|
|
.WithMany(s => s.Effects)
|
|
.HasForeignKey(se => se.SkillId);
|
|
|
|
modelBuilder.Entity<SkillRequirement>()
|
|
.HasOne(se => se.Skill)
|
|
.WithMany(s => s.SkillRequirements)
|
|
.HasForeignKey(se => se.SkillId);
|
|
|
|
modelBuilder.Entity<EquippedItem>()
|
|
.HasOne(e => e.Pet)
|
|
.WithMany(p => p.EquippedItemsList)
|
|
.HasForeignKey(e => e.PetId);
|
|
|
|
modelBuilder.Entity<EquippedItem>()
|
|
.HasOne(e => e.GameItem)
|
|
.WithMany()
|
|
.HasForeignKey(e => e.GameItemId);
|
|
|
|
modelBuilder.Entity<ActionGathered>()
|
|
.HasOne(ag => ag.Pet)
|
|
.WithMany(p => p.ActionGathered)
|
|
.HasForeignKey(ag => ag.PetId)
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
modelBuilder.Entity<ActionGathered>()
|
|
.HasOne(ag => ag.GameItem)
|
|
.WithMany()
|
|
.HasForeignKey(ag => ag.ItemId);
|
|
|
|
// Seed initial data
|
|
var skills = SkillsData.GetInitialSkillsWithoutRelations();
|
|
var requirements = SkillsData.GetInitialSkillRequirements();
|
|
var effects = SkillsData.GetInitialSkillEffects();
|
|
|
|
modelBuilder.Entity<Skill>().HasData(skills);
|
|
modelBuilder.Entity<SkillRequirement>().HasData(requirements);
|
|
modelBuilder.Entity<SkillEffect>().HasData(effects);
|
|
}
|
|
}
|
|
}
|