You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.9 KiB
62 lines
1.9 KiB
using System.ComponentModel.DataAnnotations.Schema;
|
|
using DreamsCaster.Models;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Console = DreamsCaster.Models.Console;
|
|
|
|
namespace DreamsCaster;
|
|
|
|
public class AppDbContext : DbContext
|
|
{
|
|
public DbSet<Game> Games { get; set; }
|
|
public DbSet<Console> Consoles { get; set; }
|
|
|
|
public DbSet<Developer> Developers { get; set; }
|
|
public DbSet<Publisher> Publishers { get; set; }
|
|
public DbSet<Manufacturer> Manufacturers { get; set; }
|
|
public DbSet<Release> Releases { get; set; }
|
|
|
|
public DbSet<MetaData<Game>> GamesMetaData { get; set; }
|
|
public DbSet<MetaData<Console>> ConsolesMetaData { get; set; }
|
|
public DbSet<MetaData<Developer>> DevelopersMetaData { get; set; }
|
|
public DbSet<MetaData<Publisher>> PublishersMetaData { get; set; }
|
|
public DbSet<MetaData<Manufacturer>> ManufacturersMetaData { get; set; }
|
|
|
|
public AppDbContext() : base() { }
|
|
|
|
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
|
|
|
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
|
{
|
|
base.OnModelCreating(modelBuilder);
|
|
|
|
ConfigureMetaDataFor<Console>(modelBuilder);
|
|
ConfigureMetaDataFor<Game>(modelBuilder);
|
|
ConfigureMetaDataFor<Publisher>(modelBuilder);
|
|
ConfigureMetaDataFor<Developer>(modelBuilder);
|
|
ConfigureMetaDataFor<Manufacturer>(modelBuilder);
|
|
}
|
|
|
|
void ConfigureMetaDataFor<T>(ModelBuilder modelBuilder) where T : MetaDataContainer<T>
|
|
{
|
|
modelBuilder.Entity<T>()
|
|
.HasOne(a => a.Data)
|
|
.WithOne(b => b.Owner)
|
|
.HasForeignKey<MetaData<T>>(c => c.OwnerId)
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
}
|
|
}
|
|
|
|
public static class DatabaseExtensions
|
|
{
|
|
public static bool TryGet<T>(this IEnumerable<T> haystack, Guid id, out T val) where T : IdEntity
|
|
{
|
|
if (haystack.Select(hay => hay.Id).Contains(id))
|
|
{
|
|
val = haystack.FirstOrDefault(hay => hay.Id.Equals(id));
|
|
return true;
|
|
}
|
|
|
|
val = null;
|
|
return false;
|
|
}
|
|
} |