From 98e17766b203734a1817eed94338e2d25f4395f7 Mon Sep 17 00:00:00 2001 From: transtrike Date: Sat, 13 Feb 2021 16:20:18 +0200 Subject: Project Restructure P.1 --- src/Data/DevHive.Data/DevHiveContext.cs | 115 ++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 src/Data/DevHive.Data/DevHiveContext.cs (limited to 'src/Data/DevHive.Data/DevHiveContext.cs') diff --git a/src/Data/DevHive.Data/DevHiveContext.cs b/src/Data/DevHive.Data/DevHiveContext.cs new file mode 100644 index 0000000..9de33c3 --- /dev/null +++ b/src/Data/DevHive.Data/DevHiveContext.cs @@ -0,0 +1,115 @@ +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 PostAttachments { get; set; } + public DbSet Comments { 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(); + + builder.Entity() + .HasOne(x => x.ProfilePicture) + .WithOne(x => x.User) + .HasForeignKey(x => x.UserId); + + /* Roles */ + builder.Entity() + .HasMany(x => x.Roles) + .WithMany(x => x.Users); + + /* 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); + + /* Post attachments */ + builder.Entity() + .HasOne(x => x.Post) + .WithMany(x => x.Attachments); + + /* 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.PostId); + + builder.Entity() + .HasOne(x => x.Rating) + .WithOne(x => x.Post); + + /* 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); + } + } +} -- cgit v1.2.3