using System; using DevHive.Data.Models; using DevHive.Data.RelationModels; using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; namespace DevHive.Data { public class DevHiveContext : IdentityDbContext { public DevHiveContext(DbContextOptions options) : base(options) { } public DbSet Technologies { get; set; } public DbSet Languages { get; set; } public DbSet Posts { get; set; } public DbSet Comments { get; set; } public DbSet UserFriends { get; set; } public DbSet Rating { get; set; } public DbSet RatedPost { get; set; } public DbSet UserRate { get; set; } protected override void OnModelCreating(ModelBuilder builder) { /* User */ builder.Entity() .HasIndex(x => x.UserName) .IsUnique(); /* Roles */ builder.Entity() .HasMany(x => x.Roles) .WithMany(x => x.Users); /* Friends */ builder.Entity() .HasKey(x => new { x.UserId, x.FriendId }); // builder.Entity() // .HasOne(x => x.Friend) // .WithMany(x => x.Friends); builder.Entity() .HasMany(x => x.Friends) .WithOne(x => x.User); /* Languages */ builder.Entity() .HasMany(x => x.Languages) .WithMany(x => x.Users) .UsingEntity(x => x.ToTable("LanguageUser")); builder.Entity() .HasMany(x => x.Users) .WithMany(x => x.Languages) .UsingEntity(x => x.ToTable("LanguageUser")); /* Technologies */ builder.Entity() .HasMany(x => x.Technologies) .WithMany(x => x.Users) .UsingEntity(x => x.ToTable("TechnologyUser")); builder.Entity() .HasMany(x => x.Users) .WithMany(x => x.Technologies) .UsingEntity(x => x.ToTable("TechnologyUser")); /* Post */ builder.Entity() .HasOne(x => x.Creator) .WithMany(x => x.Posts); builder.Entity() .HasMany(x => x.Comments) .WithOne(x => x.Post); /* Comment */ builder.Entity() .HasOne(x => x.Post) .WithMany(x => x.Comments); builder.Entity() .HasOne(x => x.Creator) .WithMany(x => x.Comments); /* Rating */ builder.Entity() .HasKey(x => x.Id); // builder.Entity() // .HasOne(x => x.Post) // .WithOne(x => x.Rating) // .HasForeignKey(x => x.RatingId); // builder.Entity() // .HasOne(x => x.Rating) // .WithOne(x => x.Post); // builder.Entity() // .HasMany(x => x.UsersThatRated); // /* User Rated Posts */ builder.Entity() .HasKey(x => new { x.UserId, x.PostId }); // builder.Entity() // .HasOne(x => x.User) // .WithMany(x => x.RatedPosts); // builder.Entity() // .HasOne(x => x.Post); // builder.Entity() // .HasMany(x => x.RatedPosts); base.OnModelCreating(builder); } } }