diff options
| author | transtrike <transtrike@gmail.com> | 2021-02-13 16:20:18 +0200 |
|---|---|---|
| committer | transtrike <transtrike@gmail.com> | 2021-02-13 16:20:18 +0200 |
| commit | 98e17766b203734a1817eed94338e2d25f4395f7 (patch) | |
| tree | 1266385a56cba56fd55c7faf661dd844bbdf5705 /src/Data/DevHive.Data/DevHiveContext.cs | |
| parent | 1ab34accfda22ee3ce5c7700e3b97ff3e932d649 (diff) | |
| download | DevHive-98e17766b203734a1817eed94338e2d25f4395f7.tar DevHive-98e17766b203734a1817eed94338e2d25f4395f7.tar.gz DevHive-98e17766b203734a1817eed94338e2d25f4395f7.zip | |
Project Restructure P.1
Diffstat (limited to 'src/Data/DevHive.Data/DevHiveContext.cs')
| -rw-r--r-- | src/Data/DevHive.Data/DevHiveContext.cs | 115 |
1 files changed, 115 insertions, 0 deletions
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<User, Role, Guid> + { + public DevHiveContext(DbContextOptions<DevHiveContext> options) + : base(options) { } + + public DbSet<Technology> Technologies { get; set; } + public DbSet<Language> Languages { get; set; } + public DbSet<Post> Posts { get; set; } + public DbSet<PostAttachments> PostAttachments { get; set; } + public DbSet<Comment> Comments { get; set; } + public DbSet<Rating> Rating { get; set; } + public DbSet<RatedPost> RatedPost { get; set; } + public DbSet<UserRate> UserRate { get; set; } + + protected override void OnModelCreating(ModelBuilder builder) + { + /* User */ + builder.Entity<User>() + .HasIndex(x => x.UserName) + .IsUnique(); + + builder.Entity<User>() + .HasOne(x => x.ProfilePicture) + .WithOne(x => x.User) + .HasForeignKey<ProfilePicture>(x => x.UserId); + + /* Roles */ + builder.Entity<User>() + .HasMany(x => x.Roles) + .WithMany(x => x.Users); + + /* Languages */ + builder.Entity<User>() + .HasMany(x => x.Languages) + .WithMany(x => x.Users) + .UsingEntity(x => x.ToTable("LanguageUser")); + + builder.Entity<Language>() + .HasMany(x => x.Users) + .WithMany(x => x.Languages) + .UsingEntity(x => x.ToTable("LanguageUser")); + + /* Technologies */ + builder.Entity<User>() + .HasMany(x => x.Technologies) + .WithMany(x => x.Users) + .UsingEntity(x => x.ToTable("TechnologyUser")); + + builder.Entity<Technology>() + .HasMany(x => x.Users) + .WithMany(x => x.Technologies) + .UsingEntity(x => x.ToTable("TechnologyUser")); + + /* Post */ + builder.Entity<Post>() + .HasOne(x => x.Creator) + .WithMany(x => x.Posts); + + builder.Entity<Post>() + .HasMany(x => x.Comments) + .WithOne(x => x.Post); + + /* Post attachments */ + builder.Entity<PostAttachments>() + .HasOne(x => x.Post) + .WithMany(x => x.Attachments); + + /* Comment */ + builder.Entity<Comment>() + .HasOne(x => x.Post) + .WithMany(x => x.Comments); + + builder.Entity<Comment>() + .HasOne(x => x.Creator) + .WithMany(x => x.Comments); + + /* Rating */ + builder.Entity<Rating>() + .HasKey(x => x.Id); + + builder.Entity<Rating>() + .HasOne(x => x.Post) + .WithOne(x => x.Rating) + .HasForeignKey<Rating>(x => x.PostId); + + builder.Entity<Post>() + .HasOne(x => x.Rating) + .WithOne(x => x.Post); + + /* User Rated Posts */ + builder.Entity<RatedPost>() + .HasKey(x => new { x.UserId, x.PostId }); + + builder.Entity<RatedPost>() + .HasOne(x => x.User) + .WithMany(x => x.RatedPosts); + + builder.Entity<RatedPost>() + .HasOne(x => x.Post); + + builder.Entity<User>() + .HasMany(x => x.RatedPosts); + + base.OnModelCreating(builder); + } + } +} |
