using Entity_Framework.Entity; using Entity_Framework.Entity.Relations; using Microsoft.EntityFrameworkCore; using System.Collections.Generic; using System.Reflection.Emit; using System.Security.Cryptography; using System.Text; namespace Entity_Framework { public class BDDContext : DbContext { // Constructeur public BDDContext() { } public BDDContext(DbContextOptions option) : base(option) { } // Fluent Api protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // -------------------------------------------------------------------// // Tables Pilotes modelBuilder.Entity().HasKey(e => e.Id); modelBuilder.Entity().Property(e => e.Id) .ValueGeneratedOnAdd(); modelBuilder.Entity().Property(e => e.Pseudo).IsRequired(); modelBuilder.Entity().HasIndex(e => e.Pseudo).IsUnique(); modelBuilder.Entity().Property(e => e.Email).IsRequired(); modelBuilder.Entity().HasIndex(e => e.Email).IsUnique(); modelBuilder.Entity().Property(e => e.Password).IsRequired(); //Relation avec écurie pour le propriétaire modelBuilder.Entity().HasOne(e => e.EcuriePropriétaire) .WithOne(e => e.PiloteProprietaire) .HasForeignKey(e => e.IdPiloteProprietaire); // Relation avec Session modelBuilder.Entity().HasMany(e => e.Sessions) .WithOne(e => e.Pilote) .HasForeignKey(e => e.IdPilote); // -------------------------------------------------------------------// // Tables Ecuries modelBuilder.Entity().HasKey(e => e.Id); modelBuilder.Entity().Property(e => e.Id) .ValueGeneratedOnAdd(); modelBuilder.Entity().Property(e => e.Name).IsRequired(); modelBuilder.Entity().HasIndex(e => e.Name).IsUnique(); // Relation avec pilotes /* modelBuilder.Entity().HasMany(e => e.Pilotes) .WithOne(e => e.Ecurie) .HasForeignKey(e => e.IdEcurie) .IsRequired(false);*/ // -------------------------------------------------------------------// // Tables Circuits modelBuilder.Entity().HasKey(e => e.Id); modelBuilder.Entity().Property(e => e.Id) .ValueGeneratedOnAdd(); modelBuilder.Entity().Property(e => e.Name).IsRequired(); modelBuilder.Entity().HasIndex(e => e.Name).IsUnique(); modelBuilder.Entity().HasMany(e => e.Course) .WithOne(e => e.Circuit) .HasForeignKey(e => e.IdCircuit); // -------------------------------------------------------------------// // Tables Session modelBuilder.Entity().HasKey(e => e.Id); modelBuilder.Entity().Property(e => e.Id) .ValueGeneratedOnAdd(); modelBuilder.Entity().Property(e => e.Name).IsRequired(); modelBuilder.Entity().HasMany(e => e.Tours) .WithOne(e => e.Session) .HasForeignKey(e => e.IdSession); // -------------------------------------------------------------------// // Tables Geolocalisations /* modelBuilder.Entity().HasKey(e => e.Id); modelBuilder.Entity().Property(e => e.Id) .ValueGeneratedOnAdd(); modelBuilder.Entity().Property(e => e.Latitude).IsRequired(); modelBuilder.Entity().Property(e => e.Longitude).IsRequired(); // Relation avec Points modelBuilder.Entity().HasOne(e => e.Point) .WithOne(z => z.Geolocalisation) .HasForeignKey(x => x.IdGeolocalisation); */ // -------------------------------------------------------------------// // Tables Points modelBuilder.Entity().HasKey(e => e.Id); modelBuilder.Entity().Property(e => e.Id) .ValueGeneratedOnAdd(); // -------------------------------------------------------------------// // Tables Tours modelBuilder.Entity().HasKey(e => e.Id); modelBuilder.Entity().Property(e => e.Id) .ValueGeneratedOnAdd(); modelBuilder.Entity().HasMany(e => e.Points) .WithOne(e => e.Tours) .HasForeignKey(x => x.IdTours); // -------------------------------------------------------------------// // Tables Images modelBuilder.Entity().HasKey(e => e.Id); modelBuilder.Entity().Property(e => e.Id) .ValueGeneratedOnAdd(); // -------------------------------------------------------------------// // Tables Relation_Ecurie_Pilote modelBuilder.Entity().HasKey(e => new { e.IdPilote, e.IdEcurie }); // ------------------------ STUB ------------------------------------ // //stub data byte[] passwordByte = Encoding.UTF8.GetBytes("test123"); SHA256 sha256 = SHA256.Create(); byte[] hashedByte = sha256.ComputeHash(passwordByte); string hashedPassword = Convert.ToBase64String(hashedByte); var pilote = new Pilotes { Id = 1, Pseudo = "test_PILOTE", Email = "test@gmail.com", Password = hashedPassword }; modelBuilder.Entity().HasData(pilote); modelBuilder.Entity().HasData(new Circuits { Id = 1, Name = "test_CIRCUIT" }); } // DbSet public DbSet Pilotes { get; set; } public DbSet Circuits { get; set; } public DbSet Sessions { get; set; } public DbSet Ecuries { get; set; } //public DbSet Geolocalisations { get; set; } public DbSet Points { get; set; } public DbSet Tours { get; set; } public DbSet Images { get; set; } public DbSet RelationEcuriePilote { get; set; } // BDD protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { optionsBuilder.UseSqlite("Data Source=Entity_Framework/BDD.db"); // optionsBuilder.UseSqlite($"Data Source=C:\\Users\\Jolys Enzo\\home\\BUT\\Projet\\Sae4.01\\Projet\\R-Dash_APP\\Entity_Framework\\BDD.db"); //optionsBuilder.UseSqlite($"Data Source=C:\\Users\\zinn1\\Source\\Repos\\Serveur-Api2\\Sources\\Entity_Framework\\BDD.db"); } } } }