using System; using System.Collections.Generic; using System.Text; using Remotely.Shared.Models; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; using Newtonsoft.Json; namespace Remotely.Server.Data { public class ApplicationDbContext : IdentityDbContext { public ApplicationDbContext(DbContextOptions context) : base(context) { } public DbSet CommandContexts { get; set; } public DbSet Devices { get; set; } public DbSet Organizations { get; set; } public new DbSet Users { get; set; } public DbSet EventLogs { get; set; } public DbSet SharedFiles { get; set; } public DbSet InviteLinks { get; set; } public DbSet PermissionGroups { get; set; } public DbSet UserPermissionLinks { get; set; } public DbSet DevicePermissionLinks { get; set; } protected override void OnModelCreating(ModelBuilder builder) { base.OnModelCreating(builder); builder.Entity().ToTable("RemotelyUsers"); //builder.Entity().ToTable("RemotelyUsers"); builder.Entity() .HasMany(x => x.Devices) .WithOne(x=>x.Organization); builder.Entity() .HasMany(x => x.RemotelyUsers) .WithOne(x=> x.Organization); builder.Entity() .HasMany(x => x.CommandContexts) .WithOne(x => x.Organization); builder.Entity() .HasMany(x => x.EventLogs) .WithOne(x => x.Organization); builder.Entity() .HasMany(x => x.PermissionGroups) .WithOne(x => x.Organization); builder.Entity() .HasMany(x => x.InviteLinks) .WithOne(x => x.Organization); builder.Entity() .HasMany(x => x.SharedFiles) .WithOne(x => x.Organization); builder.Entity() .Property(x=>x.TargetDeviceIDs) .HasConversion( x => JsonConvert.SerializeObject(x), x => JsonConvert.DeserializeObject(x)); builder.Entity() .Property(x => x.PSCoreResults) .HasConversion( x => JsonConvert.SerializeObject(x), x => JsonConvert.DeserializeObject>(x)); builder.Entity() .Property(x => x.CommandResults) .HasConversion( x => JsonConvert.SerializeObject(x), x => JsonConvert.DeserializeObject>(x)); builder.Entity() .HasOne(x => x.Organization); builder.Entity() .Property(x => x.UserOptions) .HasConversion( x => JsonConvert.SerializeObject(x), x => JsonConvert.DeserializeObject(x)); builder.Entity() .Property(x => x.Drives) .HasConversion( x => JsonConvert.SerializeObject(x), x => JsonConvert.DeserializeObject>(x)); builder.Entity() .HasKey(x => new { x.PermissionGroupID, x.RemotelyUserID }); builder.Entity() .HasOne(x => x.RemotelyUser) .WithMany(y => y.UserPermissionLinks) .HasForeignKey(x => x.RemotelyUserID); builder.Entity() .HasOne(x => x.PermissionGroup) .WithMany(y => y.UserPermissionLinks) .HasForeignKey(x => x.PermissionGroupID); builder.Entity() .HasKey(x => new { x.PermissionGroupID, x.DeviceID }); builder.Entity() .HasOne(x => x.RemotelyUser) .WithMany(y => y.UserPermissionLinks) .HasForeignKey(x => x.RemotelyUserID); builder.Entity() .HasOne(x => x.PermissionGroup) .WithMany(y => y.UserPermissionLinks) .HasForeignKey(x => x.PermissionGroupID); } } }