using System; using System.Data.Common; using Microsoft.EntityFrameworkCore; using Model; namespace EntityFrameworkLib { public class LolContext : DbContext { public DbSet Champions { get; set; } public DbSet Characteristics { get; set; } public DbSet Skins { get; set; } public DbSet Skills { get; set; } public DbSet Images { get; set; } public DbSet Runes { get; set; } public DbSet RunesPage { get; set; } public LolContext() { } public LolContext(DbContextOptions options) : base(options) { } protected override void OnConfiguring(DbContextOptionsBuilder options) { if (!options.IsConfigured) { base.OnConfiguring(options.UseSqlite($"DataSource=projet.Champions.db")); } } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity().Property(l => l.Id).ValueGeneratedOnAdd(); modelBuilder.Entity().HasKey(c => new { c.Name, c.ChampionForeignKey }); //Relation one-to-one entre un champion et une largeImage : un champion n'a qu'une seule largeImage et une largeImage ne peut être attribuée qu'à un seul champion modelBuilder.Entity() .HasOne(c => c.Image) .WithOne(i => i.Champion) .HasForeignKey(c => c.ImageId); //Relation one-to-one : un skin n'a qu'une image et chaque image n'appartient qu'à un seul skin modelBuilder.Entity() .HasOne(s => s.Image) .WithOne(i => i.Skin) .HasForeignKey(s => s.ImageId); //Relation one-to-many : un champion a plusieurs skins mais chaque skin ne peut appartenir qu'à un seul champion modelBuilder.Entity() .HasMany(c => c.Skins) .WithOne(s => s.Champion) .HasForeignKey(s => s.ChampionForeignKey); //Relation many-to-many entre les champions et pages de runes : Un Champion peut avoir plusieurs pages de runes et plusieurs pages de runes peuvent être définies sur un champion /*modelBuilder.Entity() .HasMany(c => c.RunePages) .WithMany(r => r.Champions) .UsingEntity(x => x.ToTable("ChampionRunePages"));*/ } } }