From 2116a2756589e591393077cfbc039f854e6cdb9a Mon Sep 17 00:00:00 2001 From: Jared Goodwin Date: Wed, 3 Apr 2019 21:05:31 -0700 Subject: [PATCH] Changed Drives property on Device entity to use value conversion instead of foreign key. --- Remotely_Library/Models/Device.cs | 2 +- Remotely_Library/Models/Drive.cs | 15 +- Remotely_Server/CurrentVersion.txt | 2 +- Remotely_Server/Data/ApplicationDbContext.cs | 7 +- Remotely_Server/Data/DataService.cs | 13 +- ...4021415_DrivesValuesConversion.Designer.cs | 559 ++++++++++++++++++ .../20190404021415_DrivesValuesConversion.cs | 55 ++ .../ApplicationDbContextModelSnapshot.cs | 37 +- Remotely_Server/Startup.cs | 12 +- 9 files changed, 634 insertions(+), 68 deletions(-) create mode 100644 Remotely_Server/Migrations/20190404021415_DrivesValuesConversion.Designer.cs create mode 100644 Remotely_Server/Migrations/20190404021415_DrivesValuesConversion.cs diff --git a/Remotely_Library/Models/Device.cs b/Remotely_Library/Models/Device.cs index 1de1528a..ea04ce6b 100644 --- a/Remotely_Library/Models/Device.cs +++ b/Remotely_Library/Models/Device.cs @@ -14,7 +14,7 @@ namespace Remotely_Library.Models public class Device { public string CurrentUser { get; set; } - public virtual ICollection Drives { get; set; } + public List Drives { get; set; } public double FreeMemory { get; set; } diff --git a/Remotely_Library/Models/Drive.cs b/Remotely_Library/Models/Drive.cs index e5be3586..cc20a9df 100644 --- a/Remotely_Library/Models/Drive.cs +++ b/Remotely_Library/Models/Drive.cs @@ -8,15 +8,12 @@ namespace Remotely_Library.Models { public class Drive { - [Key] - public string ID { get; set; } = Guid.NewGuid().ToString(); public DriveType DriveType { get; set; } - public string RootDirectory { get; internal set; } - public string Name { get; internal set; } - public string DriveFormat { get; internal set; } - public double FreeSpace { get; internal set; } - public double TotalSize { get; internal set; } - public string VolumeLabel { get; internal set; } - public string DeviceID { get; set; } + public string RootDirectory { get; set; } + public string Name { get; set; } + public string DriveFormat { get; set; } + public double FreeSpace { get; set; } + public double TotalSize { get; set; } + public string VolumeLabel { get; set; } } } diff --git a/Remotely_Server/CurrentVersion.txt b/Remotely_Server/CurrentVersion.txt index aa051403..38daac5a 100644 --- a/Remotely_Server/CurrentVersion.txt +++ b/Remotely_Server/CurrentVersion.txt @@ -1 +1 @@ -2019.04.03.1717 +2019.04.03.2058 diff --git a/Remotely_Server/Data/ApplicationDbContext.cs b/Remotely_Server/Data/ApplicationDbContext.cs index 27b6c69e..eebeaf5b 100644 --- a/Remotely_Server/Data/ApplicationDbContext.cs +++ b/Remotely_Server/Data/ApplicationDbContext.cs @@ -18,8 +18,6 @@ namespace Remotely_Server.Data public DbSet CommandContexts { get; set; } - public DbSet Drives { get; set; } - public DbSet Devices { get; set; } public DbSet Organizations { get; set; } @@ -88,7 +86,10 @@ namespace Remotely_Server.Data .HasOne(x => x.Organization); builder.Entity() - .HasMany(x => x.Drives); + .Property(x => x.Drives) + .HasConversion( + x => JsonConvert.SerializeObject(x), + x => JsonConvert.DeserializeObject>(x)); builder.Entity() diff --git a/Remotely_Server/Data/DataService.cs b/Remotely_Server/Data/DataService.cs index cc5c589b..8b8d1e50 100644 --- a/Remotely_Server/Data/DataService.cs +++ b/Remotely_Server/Data/DataService.cs @@ -156,7 +156,6 @@ namespace Remotely_Server.Data var result = RemotelyContext.Devices .Include(x => x.DevicePermissionLinks) - .Include(x => x.Drives) .Where(x => x.OrganizationID == user.OrganizationID); if (user.IsAdministrator) @@ -215,7 +214,6 @@ namespace Remotely_Server.Data var result = RemotelyContext.Devices .Include(x => x.DevicePermissionLinks) - .Include(x => x.Drives) .Where(x => x.OrganizationID == user.OrganizationID && x.ID == deviceID); @@ -275,17 +273,8 @@ namespace Remotely_Server.Data public void RemoveDevices(string[] deviceIDs) { var devices = RemotelyContext.Devices - .Include(x => x.Drives) .Where(x => deviceIDs.Contains(x.ID)); - foreach (var device in devices) - { - - if (device?.Drives?.Count > 0) - { - RemotelyContext.Drives.RemoveRange(device.Drives); - } - RemotelyContext.Devices.Remove(device); - } + RemotelyContext.Devices.RemoveRange(devices); RemotelyContext.SaveChanges(); } diff --git a/Remotely_Server/Migrations/20190404021415_DrivesValuesConversion.Designer.cs b/Remotely_Server/Migrations/20190404021415_DrivesValuesConversion.Designer.cs new file mode 100644 index 00000000..2e629998 --- /dev/null +++ b/Remotely_Server/Migrations/20190404021415_DrivesValuesConversion.Designer.cs @@ -0,0 +1,559 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Remotely_Server.Data; + +namespace Remotely_Server.Migrations +{ + [DbContext(typeof(ApplicationDbContext))] + [Migration("20190404021415_DrivesValuesConversion")] + partial class DrivesValuesConversion + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.3-servicing-35854"); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken(); + + b.Property("Name") + .HasMaxLength(256); + + b.Property("NormalizedName") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasName("RoleNameIndex"); + + b.ToTable("AspNetRoles"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ClaimType"); + + b.Property("ClaimValue"); + + b.Property("RoleId") + .IsRequired(); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("AccessFailedCount"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken(); + + b.Property("Discriminator") + .IsRequired(); + + b.Property("Email") + .HasMaxLength(256); + + b.Property("EmailConfirmed"); + + b.Property("LockoutEnabled"); + + b.Property("LockoutEnd"); + + b.Property("NormalizedEmail") + .HasMaxLength(256); + + b.Property("NormalizedUserName") + .HasMaxLength(256); + + b.Property("PasswordHash"); + + b.Property("PhoneNumber"); + + b.Property("PhoneNumberConfirmed"); + + b.Property("SecurityStamp"); + + b.Property("TwoFactorEnabled"); + + b.Property("UserName") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasName("UserNameIndex"); + + b.ToTable("RemotelyUsers"); + + b.HasDiscriminator("Discriminator").HasValue("IdentityUser"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ClaimType"); + + b.Property("ClaimValue"); + + b.Property("UserId") + .IsRequired(); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasMaxLength(128); + + b.Property("ProviderKey") + .HasMaxLength(128); + + b.Property("ProviderDisplayName"); + + b.Property("UserId") + .IsRequired(); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId"); + + b.Property("RoleId"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId"); + + b.Property("LoginProvider") + .HasMaxLength(128); + + b.Property("Name") + .HasMaxLength(128); + + b.Property("Value"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens"); + }); + + modelBuilder.Entity("Remotely_Library.Models.CommandContext", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("CommandMode"); + + b.Property("CommandResults"); + + b.Property("CommandText"); + + b.Property("OrganizationID"); + + b.Property("PSCoreResults"); + + b.Property("SenderConnectionID"); + + b.Property("SenderUserID"); + + b.Property("TargetDeviceIDs"); + + b.Property("TimeStamp"); + + b.HasKey("ID"); + + b.HasIndex("OrganizationID"); + + b.ToTable("CommandContexts"); + }); + + modelBuilder.Entity("Remotely_Library.Models.Device", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("CurrentUser"); + + b.Property("DeviceName"); + + b.Property("Drives"); + + b.Property("FreeMemory"); + + b.Property("FreeStorage"); + + b.Property("Is64Bit"); + + b.Property("IsOnline"); + + b.Property("LastOnline"); + + b.Property("OSArchitecture"); + + b.Property("OSDescription"); + + b.Property("OrganizationID"); + + b.Property("Platform"); + + b.Property("ProcessorCount"); + + b.Property("ServerVerificationToken"); + + b.Property("Tags") + .HasMaxLength(200); + + b.Property("TotalMemory"); + + b.Property("TotalStorage"); + + b.HasKey("ID"); + + b.HasIndex("OrganizationID"); + + b.ToTable("Devices"); + }); + + modelBuilder.Entity("Remotely_Library.Models.DevicePermissionLink", b => + { + b.Property("PermissionGroupID"); + + b.Property("DeviceID"); + + b.HasKey("PermissionGroupID", "DeviceID"); + + b.HasIndex("DeviceID"); + + b.ToTable("DevicePermissionLinks"); + }); + + modelBuilder.Entity("Remotely_Library.Models.EventLog", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("EventType"); + + b.Property("Message"); + + b.Property("OrganizationID"); + + b.Property("Source"); + + b.Property("StackTrace"); + + b.Property("TimeStamp"); + + b.HasKey("ID"); + + b.HasIndex("OrganizationID"); + + b.ToTable("EventLogs"); + }); + + modelBuilder.Entity("Remotely_Library.Models.InviteLink", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("DateSent"); + + b.Property("InvitedUser"); + + b.Property("IsAdmin"); + + b.Property("OrganizationID"); + + b.HasKey("ID"); + + b.HasIndex("OrganizationID"); + + b.ToTable("InviteLinks"); + }); + + modelBuilder.Entity("Remotely_Library.Models.Organization", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("OrganizationName") + .HasMaxLength(25); + + b.HasKey("ID"); + + b.ToTable("Organizations"); + }); + + modelBuilder.Entity("Remotely_Library.Models.PermissionGroup", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("Name") + .HasMaxLength(100); + + b.Property("OrganizationID"); + + b.HasKey("ID"); + + b.HasIndex("OrganizationID"); + + b.ToTable("PermissionGroups"); + }); + + modelBuilder.Entity("Remotely_Library.Models.RemotelyUserOptions", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("CommandModeShortcutBash") + .HasMaxLength(10); + + b.Property("CommandModeShortcutCMD") + .HasMaxLength(10); + + b.Property("CommandModeShortcutPSCore") + .HasMaxLength(10); + + b.Property("CommandModeShortcutWeb") + .HasMaxLength(10); + + b.Property("CommandModeShortcutWinPS") + .HasMaxLength(10); + + b.Property("ConsolePrompt") + .HasMaxLength(5); + + b.HasKey("ID"); + + b.ToTable("RemotelyUserOptions"); + }); + + modelBuilder.Entity("Remotely_Library.Models.SharedFile", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("ContentType"); + + b.Property("FileContents"); + + b.Property("FileName"); + + b.Property("OrganizationID"); + + b.Property("Timestamp"); + + b.HasKey("ID"); + + b.HasIndex("OrganizationID"); + + b.ToTable("SharedFiles"); + }); + + modelBuilder.Entity("Remotely_Library.Models.UserPermissionLink", b => + { + b.Property("PermissionGroupID"); + + b.Property("RemotelyUserID"); + + b.HasKey("PermissionGroupID", "RemotelyUserID"); + + b.HasIndex("RemotelyUserID"); + + b.ToTable("UserPermissionLinks"); + }); + + modelBuilder.Entity("Remotely_Library.Models.RemotelyUser", b => + { + b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityUser"); + + b.Property("IsAdministrator"); + + b.Property("OrganizationID"); + + b.Property("UserOptionsID"); + + b.HasIndex("OrganizationID"); + + b.HasIndex("UserOptionsID"); + + b.ToTable("RemotelyUsers"); + + b.HasDiscriminator().HasValue("RemotelyUser"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole") + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole") + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Remotely_Library.Models.CommandContext", b => + { + b.HasOne("Remotely_Library.Models.Organization", "Organization") + .WithMany("CommandContexts") + .HasForeignKey("OrganizationID"); + }); + + modelBuilder.Entity("Remotely_Library.Models.Device", b => + { + b.HasOne("Remotely_Library.Models.Organization", "Organization") + .WithMany("Devices") + .HasForeignKey("OrganizationID"); + }); + + modelBuilder.Entity("Remotely_Library.Models.DevicePermissionLink", b => + { + b.HasOne("Remotely_Library.Models.Device", "Device") + .WithMany("DevicePermissionLinks") + .HasForeignKey("DeviceID") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("Remotely_Library.Models.PermissionGroup", "PermissionGroup") + .WithMany("DevicePermissionLinks") + .HasForeignKey("PermissionGroupID") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Remotely_Library.Models.EventLog", b => + { + b.HasOne("Remotely_Library.Models.Organization", "Organization") + .WithMany("EventLogs") + .HasForeignKey("OrganizationID"); + }); + + modelBuilder.Entity("Remotely_Library.Models.InviteLink", b => + { + b.HasOne("Remotely_Library.Models.Organization", "Organization") + .WithMany("InviteLinks") + .HasForeignKey("OrganizationID"); + }); + + modelBuilder.Entity("Remotely_Library.Models.PermissionGroup", b => + { + b.HasOne("Remotely_Library.Models.Organization", "Organization") + .WithMany("PermissionGroups") + .HasForeignKey("OrganizationID"); + }); + + modelBuilder.Entity("Remotely_Library.Models.SharedFile", b => + { + b.HasOne("Remotely_Library.Models.Organization", "Organization") + .WithMany("SharedFiles") + .HasForeignKey("OrganizationID"); + }); + + modelBuilder.Entity("Remotely_Library.Models.UserPermissionLink", b => + { + b.HasOne("Remotely_Library.Models.PermissionGroup", "PermissionGroup") + .WithMany("UserPermissionLinks") + .HasForeignKey("PermissionGroupID") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("Remotely_Library.Models.RemotelyUser", "RemotelyUser") + .WithMany("UserPermissionLinks") + .HasForeignKey("RemotelyUserID") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Remotely_Library.Models.RemotelyUser", b => + { + b.HasOne("Remotely_Library.Models.Organization", "Organization") + .WithMany("RemotelyUsers") + .HasForeignKey("OrganizationID"); + + b.HasOne("Remotely_Library.Models.RemotelyUserOptions", "UserOptions") + .WithMany() + .HasForeignKey("UserOptionsID"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Remotely_Server/Migrations/20190404021415_DrivesValuesConversion.cs b/Remotely_Server/Migrations/20190404021415_DrivesValuesConversion.cs new file mode 100644 index 00000000..b51e281c --- /dev/null +++ b/Remotely_Server/Migrations/20190404021415_DrivesValuesConversion.cs @@ -0,0 +1,55 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace Remotely_Server.Migrations +{ + public partial class DrivesValuesConversion : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Drives"); + + migrationBuilder.AddColumn( + name: "Drives", + table: "Devices", + nullable: true); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "Drives", + table: "Devices"); + + migrationBuilder.CreateTable( + name: "Drives", + columns: table => new + { + ID = table.Column(nullable: false), + DeviceID = table.Column(nullable: true), + DriveFormat = table.Column(nullable: true), + DriveType = table.Column(nullable: false), + FreeSpace = table.Column(nullable: false), + Name = table.Column(nullable: true), + RootDirectory = table.Column(nullable: true), + TotalSize = table.Column(nullable: false), + VolumeLabel = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Drives", x => x.ID); + table.ForeignKey( + name: "FK_Drives_Devices_DeviceID", + column: x => x.DeviceID, + principalTable: "Devices", + principalColumn: "ID", + onDelete: ReferentialAction.Restrict); + }); + + migrationBuilder.CreateIndex( + name: "IX_Drives_DeviceID", + table: "Drives", + column: "DeviceID"); + } + } +} diff --git a/Remotely_Server/Migrations/ApplicationDbContextModelSnapshot.cs b/Remotely_Server/Migrations/ApplicationDbContextModelSnapshot.cs index 545d2db7..8378c0be 100644 --- a/Remotely_Server/Migrations/ApplicationDbContextModelSnapshot.cs +++ b/Remotely_Server/Migrations/ApplicationDbContextModelSnapshot.cs @@ -221,6 +221,8 @@ namespace Remotely_Server.Migrations b.Property("DeviceName"); + b.Property("Drives"); + b.Property("FreeMemory"); b.Property("FreeStorage"); @@ -270,34 +272,6 @@ namespace Remotely_Server.Migrations b.ToTable("DevicePermissionLinks"); }); - modelBuilder.Entity("Remotely_Library.Models.Drive", b => - { - b.Property("ID") - .ValueGeneratedOnAdd(); - - b.Property("DeviceID"); - - b.Property("DriveFormat"); - - b.Property("DriveType"); - - b.Property("FreeSpace"); - - b.Property("Name"); - - b.Property("RootDirectory"); - - b.Property("TotalSize"); - - b.Property("VolumeLabel"); - - b.HasKey("ID"); - - b.HasIndex("DeviceID"); - - b.ToTable("Drives"); - }); - modelBuilder.Entity("Remotely_Library.Models.EventLog", b => { b.Property("ID") @@ -526,13 +500,6 @@ namespace Remotely_Server.Migrations .OnDelete(DeleteBehavior.Cascade); }); - modelBuilder.Entity("Remotely_Library.Models.Drive", b => - { - b.HasOne("Remotely_Library.Models.Device") - .WithMany("Drives") - .HasForeignKey("DeviceID"); - }); - modelBuilder.Entity("Remotely_Library.Models.EventLog", b => { b.HasOne("Remotely_Library.Models.Organization", "Organization") diff --git a/Remotely_Server/Startup.cs b/Remotely_Server/Startup.cs index b828d8d2..6ceeee57 100644 --- a/Remotely_Server/Startup.cs +++ b/Remotely_Server/Startup.cs @@ -102,8 +102,7 @@ namespace Remotely_Server .SetCompatibilityVersion(CompatibilityVersion.Version_2_2).AddJsonOptions(options => { options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver(); - options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; - options.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.None; + options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; }); services.AddSignalR(options => @@ -113,7 +112,7 @@ namespace Remotely_Server .AddJsonProtocol(options => { options.PayloadSerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver(); - options.PayloadSerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; + options.PayloadSerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; }) .AddMessagePackProtocol(); @@ -205,11 +204,10 @@ namespace Remotely_Server private void ConfigureStaticFiles(IApplicationBuilder app) { - Newtonsoft.Json.JsonConvert.DefaultSettings = () => + JsonConvert.DefaultSettings = () => { - var settings = new Newtonsoft.Json.JsonSerializerSettings(); - settings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; - settings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.None; + var settings = new JsonSerializerSettings(); + settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; return settings; }; var provider = new FileExtensionContentTypeProvider();