diff --git a/src/ClientServer/Controllers/Core/CustomProjects/EditCustomProjectController.cs b/src/ClientServer/Controllers/Core/CustomProjects/EditCustomProjectController.cs
index e0f872bea77d5b36cac71df3ae64a10d5ccb35df..9ce22a0cbdaf42c82200d3a80548d429511dd42c 100644
--- a/src/ClientServer/Controllers/Core/CustomProjects/EditCustomProjectController.cs
+++ b/src/ClientServer/Controllers/Core/CustomProjects/EditCustomProjectController.cs
@@ -134,6 +134,7 @@ namespace ClientServer.Controllers.Core.customProjects
                         MemoryLimitInKb = p.TestSettings.MemoryLimitInKb,
                         TimeoutInMs = p.TestSettings.TimeoutInMs,
                         CompileTimeoutInMs = p.TestSettings.CompileTimeoutInMs,
+                        CompilerOptions = p.TestSettings.CompilerOptions,
                     }
                 }).ToList()
             };
@@ -320,6 +321,7 @@ namespace ClientServer.Controllers.Core.customProjects
                         TimeoutInMs = test.TestSettings.TimeoutInMs,
                         MaxDiskSpaceInKb = test.TestSettings.MaxDiskSpaceInKb,
                         CompileTimeoutInMs = test.TestSettings.CompileTimeoutInMs,
+                        CompilerOptions = test.TestSettings.CompilerOptions, 
                     },
                 });
             }
@@ -766,6 +768,7 @@ namespace ClientServer.Controllers.Core.customProjects
                     MemoryLimitInKb = testFullBase.TestSettings.MemoryLimitInKb,
                     TimeoutInMs = testFullBase.TestSettings.TimeoutInMs,
                     CompileTimeoutInMs = testFullBase.TestSettings.CompileTimeoutInMs,
+                    CompilerOptions = testFullBase.TestSettings.CompilerOptions,
                 }
             };
 
@@ -800,6 +803,7 @@ namespace ClientServer.Controllers.Core.customProjects
                     MemoryLimitInKb = newTest.TestSettings.MemoryLimitInKb,
                     TimeoutInMs = newTest.TestSettings.TimeoutInMs,
                     CompileTimeoutInMs = testFullBase.TestSettings.CompileTimeoutInMs,
+                    CompilerOptions = testFullBase.TestSettings.CompilerOptions,
                 }
             };
 
@@ -875,6 +879,7 @@ namespace ClientServer.Controllers.Core.customProjects
             oldTest.TestSettings.MaxDiskSpaceInKb = testFullBase.TestSettings.MaxDiskSpaceInKb;
             oldTest.TestSettings.MemoryLimitInKb = testFullBase.TestSettings.MemoryLimitInKb;
             oldTest.TestSettings.TimeoutInMs = testFullBase.TestSettings.TimeoutInMs;
+            oldTest.TestSettings.CompilerOptions = testFullBase.TestSettings.CompilerOptions;
 
             //assets are managed separately
 
@@ -915,6 +920,7 @@ namespace ClientServer.Controllers.Core.customProjects
                     MemoryLimitInKb = oldTest.TestSettings.MemoryLimitInKb,
                     TimeoutInMs = oldTest.TestSettings.TimeoutInMs,
                     CompileTimeoutInMs = testFullBase.TestSettings.CompileTimeoutInMs,
+                    CompilerOptions = testFullBase.TestSettings.CompilerOptions,
                 }
             };
 
@@ -1154,7 +1160,6 @@ namespace ClientServer.Controllers.Core.customProjects
                             Hash = "",
                             MimeType = file.ContentType,
                             OriginalName = file.FileName,
-                            RelativePath = targetHardDrivePath
                         };
 
                         var connection = new CustomProjectDescriptionWithFileAsAssetReference()
@@ -1591,7 +1596,6 @@ namespace ClientServer.Controllers.Core.customProjects
                             Hash = "",
                             MimeType = file.ContentType,
                             OriginalName = file.FileName,
-                            RelativePath = targetHardDrivePath
                         };
 
                         var connection = new CustomProjectTestWithFileAsAssetReference()
diff --git a/src/ClientServer/Controllers/Core/Exercises/DoExerciseAfterSolution/DoExerciseAfterSolutionController.cs b/src/ClientServer/Controllers/Core/Exercises/DoExerciseAfterSolution/DoExerciseAfterSolutionController.cs
index 8827f9c5671850774e5701c4a8c373e9aa58ee87..63ffb6a6c1079580c5a889a2c7542c98535093e0 100644
--- a/src/ClientServer/Controllers/Core/Exercises/DoExerciseAfterSolution/DoExerciseAfterSolutionController.cs
+++ b/src/ClientServer/Controllers/Core/Exercises/DoExerciseAfterSolution/DoExerciseAfterSolutionController.cs
@@ -902,6 +902,7 @@ namespace ClientServer.Controllers.Core.Exercises.DoExerciseAfterSolution
                         MemoryLimitInKb = p.Test.TestSettings.MemoryLimitInKb,
                         TimeoutInMs = p.Test.TestSettings.TimeoutInMs,
                         CompileTimeoutInMs = p.Test.TestSettings.CompileTimeoutInMs,
+                        CompilerOptions = p.Test.TestSettings.CompilerOptions,
                     },
                     Result = p.Result == null
                         ? null
diff --git a/src/ClientServer/Controllers/Core/Exercises/DoExerciseController.cs b/src/ClientServer/Controllers/Core/Exercises/DoExerciseController.cs
index 3d84a947dd968528d290f245a2946e6f80b06b41..0c2eec80be6bca733efd24099d2e9443edf14f68 100644
--- a/src/ClientServer/Controllers/Core/Exercises/DoExerciseController.cs
+++ b/src/ClientServer/Controllers/Core/Exercises/DoExerciseController.cs
@@ -311,6 +311,7 @@ namespace ClientServer.Controllers.Core.Exercises
                             TimeoutInMs = test.TestSettings.TimeoutInMs,
                             MaxDiskSpaceInKb = test.TestSettings.MaxDiskSpaceInKb,
                             CompileTimeoutInMs = test.TestSettings.CompileTimeoutInMs,
+                            CompilerOptions = test.TestSettings.CompilerOptions,
                         },
                         Files = test.AssetReferences.Select(p => new FilePreviewFromBackend()
                         {
@@ -348,7 +349,8 @@ namespace ClientServer.Controllers.Core.Exercises
                 MaxDiskSpaceInKb = defaultCustomTestSettings.MaxDiskSpaceInKb,
                 TimeoutInMs = defaultCustomTestSettings.TimeoutInMs,
                 MemoryLimitInKb = defaultCustomTestSettings.MemoryLimitInKb,
-                CompileTimeoutInMs = defaultCustomTestSettings.CompileTimeoutInMs
+                CompileTimeoutInMs = defaultCustomTestSettings.CompileTimeoutInMs,
+                CompilerOptions = defaultCustomTestSettings.CompilerOptions
             };
 
             #endregion
@@ -1300,7 +1302,8 @@ namespace ClientServer.Controllers.Core.Exercises
                         MaxDiskSpaceInKb = p.Test.TestSettings.MaxDiskSpaceInKb,
                         MemoryLimitInKb = p.Test.TestSettings.MemoryLimitInKb,
                         TimeoutInMs = p.Test.TestSettings.TimeoutInMs,
-                        CompileTimeoutInMs = p.Test.TestSettings.CompileTimeoutInMs
+                        CompileTimeoutInMs = p.Test.TestSettings.CompileTimeoutInMs,
+                        CompilerOptions = p.Test.TestSettings.CompilerOptions
                     },
                     Result = p.Result == null
                         ? null
@@ -2927,7 +2930,6 @@ namespace ClientServer.Controllers.Core.Exercises
                             Hash = "",
                             MimeType = file.ContentType,
                             OriginalName = file.FileName,
-                            RelativePath = targetHardDrivePath
                         };
 
                         var connection = new CustomTestWithFileAsAssetReference()
diff --git a/src/ClientServer/Controllers/Core/Exercises/ExerciseEditorController.cs b/src/ClientServer/Controllers/Core/Exercises/ExerciseEditorController.cs
index 39ccfa2a093f03446f89848d673f72a69de59e73..b52c7ca068f26e4fbae8ae95829a35059700ca6c 100644
--- a/src/ClientServer/Controllers/Core/Exercises/ExerciseEditorController.cs
+++ b/src/ClientServer/Controllers/Core/Exercises/ExerciseEditorController.cs
@@ -74,6 +74,7 @@ namespace ClientServer.Controllers.Core.Exercises
                     TimeoutInMs = oldExercise.DefaultCustomTestSettings.TimeoutInMs,
                     MaxDiskSpaceInKb = oldExercise.DefaultCustomTestSettings.MaxDiskSpaceInKb,
                     CompileTimeoutInMs = oldExercise.DefaultCustomTestSettings.CompileTimeoutInMs,
+                    CompilerOptions = oldExercise.DefaultCustomTestSettings.CompilerOptions,
                 },
                 Tests = oldExercise.Tests.Select(p => new ExerciseTestFromBackend()
                 {
@@ -90,7 +91,8 @@ namespace ClientServer.Controllers.Core.Exercises
                         MemoryLimitInKb = p.TestSettings.MemoryLimitInKb,
                         MaxDiskSpaceInKb = p.TestSettings.MaxDiskSpaceInKb,
                         TimeoutInMs = p.TestSettings.TimeoutInMs,
-                        CompileTimeoutInMs = p.TestSettings.CompileTimeoutInMs
+                        CompileTimeoutInMs = p.TestSettings.CompileTimeoutInMs,
+                        CompilerOptions = p.TestSettings.CompilerOptions
                     },
                     Files = p.AssetReferences.Select(asset => new FilePreviewFromBackend()
                     {
@@ -180,6 +182,7 @@ namespace ClientServer.Controllers.Core.Exercises
                     TimeoutInMs = oldExercise.DefaultCustomTestSettings.TimeoutInMs,
                     MaxDiskSpaceInKb = oldExercise.DefaultCustomTestSettings.MaxDiskSpaceInKb,
                     CompileTimeoutInMs = oldExercise.DefaultCustomTestSettings.CompileTimeoutInMs,
+                    CompilerOptions = oldExercise.DefaultCustomTestSettings.CompilerOptions,
                 },
                 Tests = oldExercise.Tests.Select(p => new ExerciseTestFromBackendWithData()
                 {
@@ -196,7 +199,8 @@ namespace ClientServer.Controllers.Core.Exercises
                         MemoryLimitInKb = p.TestSettings.MemoryLimitInKb,
                         MaxDiskSpaceInKb = p.TestSettings.MaxDiskSpaceInKb,
                         TimeoutInMs = p.TestSettings.TimeoutInMs,
-                        CompileTimeoutInMs = p.TestSettings.CompileTimeoutInMs
+                        CompileTimeoutInMs = p.TestSettings.CompileTimeoutInMs,
+                        CompilerOptions = p.TestSettings.CompilerOptions,
                     },
                     Files = p.AssetReferences.Select(asset => new TestAssetFromBackendWithData()
                     {
@@ -424,7 +428,8 @@ namespace ClientServer.Controllers.Core.Exercises
                 MemoryLimitInKb = exerciseFromFrontend.DefaultTestSettings.MemoryLimitInKb,
                 TimeoutInMs = exerciseFromFrontend.DefaultTestSettings.TimeoutInMs,
                 MaxDiskSpaceInKb = exerciseFromFrontend.DefaultTestSettings.MaxDiskSpaceInKb,
-                CompileTimeoutInMs = exerciseFromFrontend.DefaultTestSettings.CompileTimeoutInMs
+                CompileTimeoutInMs = exerciseFromFrontend.DefaultTestSettings.CompileTimeoutInMs,
+                CompilerOptions = exerciseFromFrontend.DefaultTestSettings.CompilerOptions,
             };
 
             //var defaultTestCaseSettings = new List<DefaultCustomTestSetting>();
@@ -473,6 +478,7 @@ namespace ClientServer.Controllers.Core.Exercises
                         TimeoutInMs = frontendTest.TestSettings.TimeoutInMs,
                         MaxDiskSpaceInKb = frontendTest.TestSettings.MaxDiskSpaceInKb,
                         CompileTimeoutInMs = frontendTest.TestSettings.CompileTimeoutInMs,
+                        CompilerOptions = frontendTest.TestSettings.CompilerOptions,
                     },
                 });
             }
@@ -857,6 +863,7 @@ namespace ClientServer.Controllers.Core.Exercises
             oldExercise.DefaultCustomTestSettings.MemoryLimitInKb =
                 exerciseFromFrontend.DefaultTestSettings.MemoryLimitInKb;
             oldExercise.DefaultCustomTestSettings.TimeoutInMs = exerciseFromFrontend.DefaultTestSettings.TimeoutInMs;
+            oldExercise.DefaultCustomTestSettings.CompilerOptions = exerciseFromFrontend.DefaultTestSettings.CompilerOptions;
 
             #endregion
 
@@ -905,6 +912,7 @@ namespace ClientServer.Controllers.Core.Exercises
                     oldExerciseTest.TestSettings.MemoryLimitInKb = testCaseFromBackend.TestSettings.MemoryLimitInKb;
                     oldExerciseTest.TestSettings.MaxDiskSpaceInKb = testCaseFromBackend.TestSettings.MaxDiskSpaceInKb;
                     oldExerciseTest.TestSettings.TimeoutInMs = testCaseFromBackend.TestSettings.TimeoutInMs;
+                    oldExerciseTest.TestSettings.CompilerOptions = testCaseFromBackend.TestSettings.CompilerOptions;
                     oldExerciseTest.DisplayIndex = testCaseFromBackend.DisplayIndex;
 
                     oldExerciseTest.TestType = testType;
@@ -927,6 +935,7 @@ namespace ClientServer.Controllers.Core.Exercises
                             MaxDiskSpaceInKb = testCaseFromBackend.TestSettings.MaxDiskSpaceInKb,
                             TimeoutInMs = testCaseFromBackend.TestSettings.TimeoutInMs,
                             CompileTimeoutInMs = testCaseFromBackend.TestSettings.CompileTimeoutInMs,
+                            CompilerOptions = testCaseFromBackend.TestSettings.CompilerOptions,
                         },
                         TestType = testType,
                     });
@@ -952,6 +961,7 @@ namespace ClientServer.Controllers.Core.Exercises
                         TimeoutInMs = frontendTest.TestSettings.TimeoutInMs,
                         MaxDiskSpaceInKb = frontendTest.TestSettings.MaxDiskSpaceInKb,
                         CompileTimeoutInMs = frontendTest.TestSettings.CompileTimeoutInMs,
+                        CompilerOptions = frontendTest.TestSettings.CompilerOptions,
                     },
                 });
             }
@@ -1534,7 +1544,8 @@ namespace ClientServer.Controllers.Core.Exercises
                         CompileTimeoutInMs = exerciseTest.TestSettings.CompileTimeoutInMs,
                         TimeoutInMs = exerciseTest.TestSettings.TimeoutInMs,
                         MemoryLimitInKb = exerciseTest.TestSettings.MemoryLimitInKb,
-                        MaxDiskSpaceInKb = exerciseTest.TestSettings.MaxDiskSpaceInKb
+                        MaxDiskSpaceInKb = exerciseTest.TestSettings.MaxDiskSpaceInKb,
+                        CompilerOptions = exerciseTest.TestSettings.CompilerOptions,
                     },
                     AssetReferences = new List<TestWithFileAsAssetReference>(),
                 };
@@ -1578,7 +1589,8 @@ namespace ClientServer.Controllers.Core.Exercises
                     TimeoutInMs = oldExercise.DefaultCustomTestSettings.TimeoutInMs,
                     CompileTimeoutInMs = oldExercise.DefaultCustomTestSettings.CompileTimeoutInMs,
                     MaxDiskSpaceInKb = oldExercise.DefaultCustomTestSettings.MaxDiskSpaceInKb,
-                    MemoryLimitInKb = oldExercise.DefaultCustomTestSettings.MemoryLimitInKb
+                    MemoryLimitInKb = oldExercise.DefaultCustomTestSettings.MemoryLimitInKb,
+                    CompilerOptions = oldExercise.DefaultCustomTestSettings.CompilerOptions,
                 },
             };
 
@@ -1737,7 +1749,6 @@ namespace ClientServer.Controllers.Core.Exercises
                             Hash = "",
                             MimeType = file.ContentType,
                             OriginalName = file.FileName,
-                            RelativePath = targetHardDrivePath
                         };
 
                         var connection = new ExerciseDescriptionWithFileAsAssetReference()
@@ -2129,7 +2140,6 @@ namespace ClientServer.Controllers.Core.Exercises
                             Hash = "",
                             MimeType = file.ContentType,
                             OriginalName = file.FileName,
-                            RelativePath = targetHardDrivePath
                         };
 
                         var connection = new TestWithFileAsAssetReference()
@@ -2614,6 +2624,11 @@ namespace ClientServer.Controllers.Core.Exercises
         /// the max disk space to users program can write to
         /// </summary>
         public int MaxDiskSpaceInKb { get; set; }
+        
+        /// <summary>
+        /// some compiler options .g. -Xlint options needs to be separated by whitespaces (like normal command args)
+        /// </summary>
+        public string CompilerOptions { get; set; }
     }
 
     #endregion
diff --git a/src/ClientServer/Controllers/Core/Exercises/TutorViewAssessmentController.cs b/src/ClientServer/Controllers/Core/Exercises/TutorViewAssessmentController.cs
index a35ada8cdcd729e80a13fb885bdbf9816e3a8da1..4a2cec3d513cf17a406f4c1532a3c50f991e01f2 100644
--- a/src/ClientServer/Controllers/Core/Exercises/TutorViewAssessmentController.cs
+++ b/src/ClientServer/Controllers/Core/Exercises/TutorViewAssessmentController.cs
@@ -286,6 +286,7 @@ namespace ClientServer.Controllers.Core.Exercises
                             TimeoutInMs = test.TestSettings.TimeoutInMs,
                             MaxDiskSpaceInKb = test.TestSettings.MaxDiskSpaceInKb,
                             CompileTimeoutInMs = test.TestSettings.CompileTimeoutInMs,
+                            CompilerOptions = test.TestSettings.CompilerOptions,
                         },
                         Files = test.AssetReferences.Select(p => new FilePreviewFromBackend()
                         {
diff --git a/src/ClientServer/Controllers/Core/Init.cs b/src/ClientServer/Controllers/Core/Init.cs
index 1c79550a987e00c46285999e159b0680aa239f3c..1b6821f2d478851f2d814c173e5910cf9632d6f3 100644
--- a/src/ClientServer/Controllers/Core/Init.cs
+++ b/src/ClientServer/Controllers/Core/Init.cs
@@ -347,7 +347,6 @@ namespace ClientServer.Controllers.Core
                                     MimeType = descriptionAsset.MimeType,
                                     SizeInBytes = descriptionAsset.Content.Length,
                                     Hash = "",
-                                    RelativePath = basePath
                                 };
 
                                 var conn = new ExerciseDescriptionWithFileAsAssetReference()
@@ -516,7 +515,6 @@ namespace ClientServer.Controllers.Core
                                     MimeType = testAsset.MimeType,
                                     SizeInBytes = testAsset.Content.Length,
                                     Hash = "",
-                                    RelativePath = basePath
                                 };
 
                                 var conn = new TestWithFileAsAssetReference()
@@ -625,7 +623,6 @@ namespace ClientServer.Controllers.Core
                                     MimeType = customTestAsset.MimeType,
                                     SizeInBytes = customTestAsset.Content.Length,
                                     Hash = "",
-                                    RelativePath = basePath
                                 };
 
                                 var conn = new CustomTestWithFileAsAssetReference()
@@ -735,7 +732,6 @@ namespace ClientServer.Controllers.Core
                                     MimeType = customAsset.MimeType,
                                     SizeInBytes = customAsset.Content.Length,
                                     Hash = "",
-                                    RelativePath = basePath
                                 };
 
                                 var conn = new CustomProjectDescriptionWithFileAsAssetReference()
@@ -905,7 +901,6 @@ namespace ClientServer.Controllers.Core
                                     MimeType = customProjectTestAsset.MimeType,
                                     SizeInBytes = customProjectTestAsset.Content.Length,
                                     Hash = "",
-                                    RelativePath = basePath
                                 };
 
                                 var conn = new CustomProjectTestWithFileAsAssetReference()
diff --git a/src/ClientServer/Controllers/Core/Testing/TestingController.cs b/src/ClientServer/Controllers/Core/Testing/TestingController.cs
index ce165c28667659b44f4600e473981eb649598d43..a6b18bec7a68c24091613c4da4e40802e20ab056 100644
--- a/src/ClientServer/Controllers/Core/Testing/TestingController.cs
+++ b/src/ClientServer/Controllers/Core/Testing/TestingController.cs
@@ -188,7 +188,8 @@ namespace ClientServer.Controllers.Core.Testing
                     TimeoutInMs = systemSettings.JustRunProgramTimeoutInMs,
                     MemoryLimitInKb = systemSettings.JustRunProgramMemoryLimitInKb,
                     MaxDiskSpaceInKb = systemSettings.JustRunProgramMaxDiskSpaceInKb,
-                    CompileTimeoutInMs = systemSettings.JustRunProgramCompileTimeoutInMs
+                    CompileTimeoutInMs = systemSettings.JustRunProgramCompileTimeoutInMs,
+                    CompilerOptions = "",
                 }
             };
 
@@ -334,6 +335,7 @@ namespace ClientServer.Controllers.Core.Testing
                     MemoryLimitInKb = systemSettings.JustRunProgramMemoryLimitInKb,
                     MaxDiskSpaceInKb = systemSettings.JustRunProgramMaxDiskSpaceInKb,
                     CompileTimeoutInMs = systemSettings.JustRunProgramCompileTimeoutInMs,
+                    CompilerOptions = "",
                 }
             };
 
@@ -503,6 +505,7 @@ namespace ClientServer.Controllers.Core.Testing
                     MemoryLimitInKb = systemSettings.JustRunProgramMemoryLimitInKb,
                     MaxDiskSpaceInKb = systemSettings.JustRunProgramMaxDiskSpaceInKb,
                     CompileTimeoutInMs = systemSettings.JustRunProgramCompileTimeoutInMs,
+                    CompilerOptions = "",
                 }
             };
 
@@ -1135,7 +1138,8 @@ namespace ClientServer.Controllers.Core.Testing
                 TimeoutInMs = systemSettings.JustRunProgramTimeoutInMs,
                 MemoryLimitInKb = systemSettings.JustRunProgramMemoryLimitInKb,
                 MaxDiskSpaceInKb = systemSettings.JustRunProgramMaxDiskSpaceInKb,
-                CompileTimeoutInMs = systemSettings.JustRunProgramCompileTimeoutInMs
+                CompileTimeoutInMs = systemSettings.JustRunProgramCompileTimeoutInMs,
+                CompilerOptions = "",
             };
             
             var justRunTest = new AllTest()
@@ -3069,6 +3073,7 @@ namespace ClientServer.Controllers.Core.Testing
                     CompileTimeoutInMs = test.TestSettings.CompileTimeoutInMs,
                     MemoryLimitInKb = test.TestSettings.MemoryLimitInKb,
                     MaxDiskSpaceInKb = test.TestSettings.MaxDiskSpaceInKb,
+                    CompilerOptions = test.TestSettings.CompilerOptions,
                     AllAssets = test.TestAssetsWithContent.Select(p => new TestAssetFileForTestServer()
                     {
                         FileName = p.DisplayName,
@@ -3454,6 +3459,7 @@ namespace ClientServer.Controllers.Core.Testing
 
         /// <summary>
         /// the test content to use
+        /// test server will throw if this is null
         /// </summary>
         public string TestContent { get; set; }
 
@@ -3476,6 +3482,11 @@ namespace ClientServer.Controllers.Core.Testing
         /// the max dispk space in kb the user program can write to
         /// </summary>
         public int MaxDiskSpaceInKb { get; set; }
+        
+        /// <summary>
+        /// some compiler options .g. -Xlint options needs to be separated by whitespaces (like normal command args)
+        /// </summary>
+        public string CompilerOptions { get; set; }
 
         /// <summary>
         /// all test asset files
diff --git a/src/ClientServer/Migrations/20190606164356_RemoveAssetPathsAddedCompilerOptions.Designer.cs b/src/ClientServer/Migrations/20190606164356_RemoveAssetPathsAddedCompilerOptions.Designer.cs
new file mode 100755
index 0000000000000000000000000000000000000000..4ce072284ee96887df857e349047e7663498ab30
--- /dev/null
+++ b/src/ClientServer/Migrations/20190606164356_RemoveAssetPathsAddedCompilerOptions.Designer.cs
@@ -0,0 +1,2241 @@
+using System;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using ClientServer.Db;
+using ClientServer.Models.Exercises.Release;
+
+namespace ClientServer.Migrations
+{
+    [DbContext(typeof(SyndromDbContext))]
+    [Migration("20190606164356_RemoveAssetPathsAddedCompilerOptions")]
+    partial class RemoveAssetPathsAddedCompilerOptions
+    {
+        protected override void BuildTargetModel(ModelBuilder modelBuilder)
+        {
+            modelBuilder
+                .HasAnnotation("ProductVersion", "1.0.3");
+
+            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.HasKey("Id");
+
+                    b.ToTable("AwaitDummies");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<string>("DisplayName")
+                        .HasMaxLength(500);
+
+                    b.Property<int>("LastEditorPLangId");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<int>("UserId");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("CustomProjects");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<string>("Content")
+                        .HasMaxLength(10000);
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<int>("CustomProjectId");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("CustomProjectId")
+                        .IsUnique();
+
+                    b.ToTable("CustomProjectDescriptions");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescriptionWithFileAsAssetReference", b =>
+                {
+                    b.Property<int>("CustomProjectDescriptionId");
+
+                    b.Property<int>("FileReferenceUserFileAssetId");
+
+                    b.HasKey("CustomProjectDescriptionId", "FileReferenceUserFileAssetId");
+
+                    b.HasIndex("CustomProjectDescriptionId");
+
+                    b.HasIndex("FileReferenceUserFileAssetId");
+
+                    b.ToTable("CustomProjectDescriptionWithFileAsAssetReferences");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<int>("CustomProjectId");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<int?>("MainFileId");
+
+                    b.Property<int>("PLangId");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("CustomProjectId");
+
+                    b.HasIndex("MainFileId")
+                        .IsUnique();
+
+                    b.HasIndex("PLangId");
+
+                    b.ToTable("CustomProjectSolutions");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<string>("Content")
+                        .HasMaxLength(10000);
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<int?>("CustomProjectSolutionId")
+                        .IsRequired();
+
+                    b.Property<int>("DisplayIndex");
+
+                    b.Property<string>("FileNameWithExtension")
+                        .HasMaxLength(500);
+
+                    b.Property<bool>("IsDisplayed");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("CustomProjectSolutionId");
+
+                    b.ToTable("CustomProjectSolutionFiles");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<string>("Content")
+                        .HasMaxLength(5000);
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<int>("CustomProjectId");
+
+                    b.Property<int>("DisplayIndex");
+
+                    b.Property<string>("DisplayName")
+                        .HasMaxLength(500);
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<int>("TestSettingsId");
+
+                    b.Property<int>("TestTypeId");
+
+                    b.Property<int>("Weight");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("CustomProjectId");
+
+                    b.HasIndex("TestSettingsId")
+                        .IsUnique();
+
+                    b.HasIndex("TestTypeId");
+
+                    b.ToTable("CustomProjectTests");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<byte[]>("Content");
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<int?>("CustomProjectTestId")
+                        .IsRequired();
+
+                    b.Property<string>("DisplayName")
+                        .HasMaxLength(500);
+
+                    b.Property<string>("Hash")
+                        .HasMaxLength(500);
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<string>("MimeType")
+                        .HasMaxLength(500);
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("CustomProjectTestId");
+
+                    b.ToTable("CustomProjectTestAssets");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithFileAsAssetReference", b =>
+                {
+                    b.Property<int>("CustomProjectTestId");
+
+                    b.Property<int>("FileReferenceUserFileAssetId");
+
+                    b.HasKey("CustomProjectTestId", "FileReferenceUserFileAssetId");
+
+                    b.HasIndex("CustomProjectTestId");
+
+                    b.HasIndex("FileReferenceUserFileAssetId");
+
+                    b.ToTable("CustomProjectTestWithFileAsAssetReferences");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
+                {
+                    b.Property<int>("CustomProjectSolutionId");
+
+                    b.Property<int>("CustomProjectTestId");
+
+                    b.Property<int?>("CompileTimeoutInMsUsed");
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<bool?>("HasCompiled");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<bool?>("Passed");
+
+                    b.Property<int?>("ProgramExitCode");
+
+                    b.Property<string>("Protocol")
+                        .HasMaxLength(10000);
+
+                    b.Property<string>("RunnerVersion")
+                        .HasMaxLength(500);
+
+                    b.Property<int?>("TestResultCode");
+
+                    b.Property<string>("TestServerVersion")
+                        .HasMaxLength(500);
+
+                    b.Property<int?>("TimeForCompiling");
+
+                    b.Property<int?>("TimeForUserProgram");
+
+                    b.Property<int?>("TimeoutInMsUsed");
+
+                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
+
+                    b.HasIndex("CustomProjectSolutionId");
+
+                    b.HasIndex("CustomProjectTestId");
+
+                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<int?>("MainFileId");
+
+                    b.Property<int>("SolutionExerciseReleaseId");
+
+                    b.Property<int>("SolutionPLangId");
+
+                    b.Property<int>("SolutionUserId");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("MainFileId")
+                        .IsUnique();
+
+                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
+                        .IsUnique();
+
+                    b.ToTable("AfterSolutions");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<int>("AfterSolutionId");
+
+                    b.Property<string>("Content")
+                        .HasMaxLength(10000);
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<int>("DisplayIndex");
+
+                    b.Property<string>("FileNameWithExtension")
+                        .HasMaxLength(500);
+
+                    b.Property<bool>("IsDisplayed");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<int?>("TemplateFileId");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("AfterSolutionId");
+
+                    b.HasIndex("TemplateFileId");
+
+                    b.ToTable("AfterSolutionFiles");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
+                {
+                    b.Property<int>("CustomTestId");
+
+                    b.Property<int>("AfterSolutionId");
+
+                    b.Property<int?>("CompileTimeoutInMsUsed");
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<bool?>("HasCompiled");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<bool?>("Passed");
+
+                    b.Property<int?>("ProgramExitCode");
+
+                    b.Property<string>("Protocol")
+                        .HasMaxLength(10000);
+
+                    b.Property<string>("RunnerVersion")
+                        .HasMaxLength(500);
+
+                    b.Property<int?>("TestResultCode");
+
+                    b.Property<string>("TestServerVersion")
+                        .HasMaxLength(500);
+
+                    b.Property<int?>("TimeForCompiling");
+
+                    b.Property<int?>("TimeForUserProgram");
+
+                    b.Property<int?>("TimeoutInMsUsed");
+
+                    b.HasKey("CustomTestId", "AfterSolutionId");
+
+                    b.HasIndex("AfterSolutionId");
+
+                    b.HasIndex("CustomTestId");
+
+                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
+                {
+                    b.Property<int>("TestId");
+
+                    b.Property<int>("AfterSolutionId");
+
+                    b.Property<int?>("CompileTimeoutInMsUsed");
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<bool?>("HasCompiled");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<bool?>("Passed");
+
+                    b.Property<int?>("ProgramExitCode");
+
+                    b.Property<string>("Protocol")
+                        .HasMaxLength(10000);
+
+                    b.Property<string>("RunnerVersion")
+                        .HasMaxLength(500);
+
+                    b.Property<int?>("TestResultCode");
+
+                    b.Property<string>("TestServerVersion")
+                        .HasMaxLength(500);
+
+                    b.Property<int?>("TimeForCompiling");
+
+                    b.Property<int?>("TimeForUserProgram");
+
+                    b.Property<int?>("TimeoutInMsUsed");
+
+                    b.HasKey("TestId", "AfterSolutionId");
+
+                    b.HasIndex("AfterSolutionId");
+
+                    b.HasIndex("TestId");
+
+                    b.ToTable("TestWithAfterSolutionAsTestResults");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<string>("AssetUrl")
+                        .HasMaxLength(500);
+
+                    b.Property<byte[]>("Content");
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<int?>("CustomProjectDescriptionId");
+
+                    b.Property<string>("DisplayName")
+                        .HasMaxLength(500);
+
+                    b.Property<int?>("ExerciseDescriptionId")
+                        .IsRequired();
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<string>("MimeType")
+                        .HasMaxLength(500);
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("CustomProjectDescriptionId");
+
+                    b.HasIndex("ExerciseDescriptionId");
+
+                    b.ToTable("Assets");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<int>("ExerciseId");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<int?>("MainFileId");
+
+                    b.Property<int>("PLangId");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("ExerciseId");
+
+                    b.HasIndex("MainFileId")
+                        .IsUnique();
+
+                    b.HasIndex("PLangId");
+
+                    b.ToTable("Templates");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.CustomTestWithFileAsAssetReference", b =>
+                {
+                    b.Property<int>("CustomTestId");
+
+                    b.Property<int>("FileReferenceUserFileAssetId");
+
+                    b.HasKey("CustomTestId", "FileReferenceUserFileAssetId");
+
+                    b.HasIndex("CustomTestId");
+
+                    b.HasIndex("FileReferenceUserFileAssetId");
+
+                    b.ToTable("CustomTestWithFileAsAssetReferences");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<bool>("CanUserCreateCustomTests");
+
+                    b.Property<bool>("CanUserCreateFiles");
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<string>("DisplayName")
+                        .HasMaxLength(500);
+
+                    b.Property<bool>("IsOnlyVisibleToOwner");
+
+                    b.Property<bool>("IsPermanentlyLocked");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<string>("Note")
+                        .HasMaxLength(1000);
+
+                    b.Property<string>("ShortDescription")
+                        .HasMaxLength(500);
+
+                    b.Property<int>("UserGroupId");
+
+                    b.Property<int?>("UserId");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("UserGroupId");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("Exercises");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<string>("Content")
+                        .HasMaxLength(10000);
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<int>("ExerciseId");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("ExerciseId")
+                        .IsUnique();
+
+                    b.ToTable("ExerciseDescriptions");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescriptionWithFileAsAssetReference", b =>
+                {
+                    b.Property<int>("ExerciseDescriptionId");
+
+                    b.Property<int>("FileReferenceMarkdownAssetId");
+
+                    b.HasKey("ExerciseDescriptionId", "FileReferenceMarkdownAssetId");
+
+                    b.HasIndex("ExerciseDescriptionId");
+
+                    b.HasIndex("FileReferenceMarkdownAssetId");
+
+                    b.ToTable("ExerciseDescriptionWithFileAsAssetReferences");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<int>("ExerciseId");
+
+                    b.Property<int?>("ExerciseId1");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("ExerciseId")
+                        .IsUnique();
+
+                    b.HasIndex("ExerciseId1");
+
+                    b.ToTable("MetaDatas");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<DateTime?>("AutomaticEndAt");
+
+                    b.Property<DateTime?>("AutomaticStartAt");
+
+                    b.Property<int>("AvailableWorkingTimeInMinutes");
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<int>("ExerciseId");
+
+                    b.Property<string>("GeneratedCode")
+                        .IsRequired()
+                        .HasMaxLength(500);
+
+                    b.Property<bool>("HadAutomaticAssessmentErrors");
+
+                    b.Property<bool>("HasAutomaticAssessmentFinished");
+
+                    b.Property<bool>("HasAutomaticAssessmentStarted");
+
+                    b.Property<bool>("HasLimitedWorkingTime");
+
+                    b.Property<bool>("HideExerciseLeaveActions");
+
+                    b.Property<bool>("HideInOverviews");
+
+                    b.Property<bool>("HidePrintOptions");
+
+                    b.Property<bool>("HideSiteHeaderBar");
+
+                    b.Property<bool>("IsReleased");
+
+                    b.Property<bool>("IsVisibleToAllAfterRelease");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<int?>("MaxManualPoint");
+
+                    b.Property<string>("Note")
+                        .HasMaxLength(1000);
+
+                    b.Property<int>("PLangId");
+
+                    b.Property<int>("ReleaseDurationType");
+
+                    b.Property<int>("ReleaseStartType");
+
+                    b.Property<DateTime?>("ReleasedAt");
+
+                    b.Property<bool>("RunAlsoNormalTests");
+
+                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
+
+                    b.Property<bool>("ShouldClearClipboard");
+
+                    b.Property<bool>("ShowAdditionalLogButton");
+
+                    b.HasKey("Id");
+
+                    b.HasAlternateKey("GeneratedCode")
+                        .HasName("Unique_GeneratedCode");
+
+                    b.HasIndex("ExerciseId");
+
+                    b.HasIndex("PLangId");
+
+                    b.ToTable("ExerciseReleases");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
+                {
+                    b.Property<int>("CustomTestId");
+
+                    b.Property<int>("SolutionUserId");
+
+                    b.Property<int>("SolutionExerciseReleaseId");
+
+                    b.Property<int>("SolutionPLangId");
+
+                    b.Property<int?>("CompileTimeoutInMsUsed");
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<bool?>("HasCompiled");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<bool?>("Passed");
+
+                    b.Property<int?>("ProgramExitCode");
+
+                    b.Property<string>("Protocol")
+                        .HasMaxLength(10000);
+
+                    b.Property<string>("RunnerVersion")
+                        .HasMaxLength(500);
+
+                    b.Property<int?>("TestResultCode");
+
+                    b.Property<string>("TestServerVersion")
+                        .HasMaxLength(500);
+
+                    b.Property<int?>("TimeForCompiling");
+
+                    b.Property<int?>("TimeForUserProgram");
+
+                    b.Property<int?>("TimeoutInMsUsed");
+
+                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
+
+                    b.HasIndex("CustomTestId");
+
+                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
+
+                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
+                {
+                    b.Property<int>("UserId");
+
+                    b.Property<int>("ExerciseReleaseId");
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<int>("LastEditedPLangId");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<bool>("LockSolutionsFlag");
+
+                    b.Property<bool>("ShouldNotCount");
+
+                    b.HasKey("UserId", "ExerciseReleaseId");
+
+                    b.HasIndex("ExerciseReleaseId");
+
+                    b.HasIndex("LastEditedPLangId");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
+                {
+                    b.Property<int>("UserId");
+
+                    b.Property<int>("ExerciseReleaseId");
+
+                    b.Property<int>("PLangId");
+
+                    b.Property<int?>("AssessmentId");
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<string>("LastEditingIpAddress")
+                        .HasMaxLength(500);
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<int?>("MainFileId");
+
+                    b.Property<string>("Note")
+                        .HasMaxLength(1000);
+
+                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
+
+                    b.HasIndex("AssessmentId")
+                        .IsUnique();
+
+                    b.HasIndex("MainFileId")
+                        .IsUnique();
+
+                    b.HasIndex("PLangId");
+
+                    b.HasIndex("UserId", "ExerciseReleaseId");
+
+                    b.ToTable("Solutions");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<string>("FeedbackForStudent")
+                        .HasMaxLength(1000);
+
+                    b.Property<string>("LastAssessmentErrorMessage")
+                        .HasMaxLength(5000);
+
+                    b.Property<int?>("ManualPoints");
+
+                    b.Property<int>("MaxNormalTestPoints");
+
+                    b.Property<int>("MaxSubmitTestPoints");
+
+                    b.Property<int?>("NormalTestPoints");
+
+                    b.Property<string>("NoteForOtherTutors")
+                        .HasMaxLength(1000);
+
+                    b.Property<int?>("SubmitTestPoints");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("SolutionAssessment");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<string>("Content")
+                        .HasMaxLength(10000);
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<int>("DisplayIndex");
+
+                    b.Property<string>("FileNameWithExtension")
+                        .HasMaxLength(500);
+
+                    b.Property<bool>("IsDisplayed");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<int>("SolutionExerciseReleaseId");
+
+                    b.Property<int>("SolutionPLangId");
+
+                    b.Property<int>("SolutionUserId");
+
+                    b.Property<int?>("TemplateFileId");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("TemplateFileId");
+
+                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
+
+                    b.ToTable("SolutionFiles");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
+                {
+                    b.Property<int>("TestId");
+
+                    b.Property<int>("SolutionUserId");
+
+                    b.Property<int>("SolutionExerciseReleaseId");
+
+                    b.Property<int>("SolutionPLangId");
+
+                    b.Property<int?>("CompileTimeoutInMsUsed");
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<bool?>("HasCompiled");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<bool?>("Passed");
+
+                    b.Property<int?>("ProgramExitCode");
+
+                    b.Property<string>("Protocol")
+                        .HasMaxLength(10000);
+
+                    b.Property<string>("RunnerVersion")
+                        .HasMaxLength(500);
+
+                    b.Property<int?>("TestResultCode");
+
+                    b.Property<string>("TestServerVersion")
+                        .HasMaxLength(500);
+
+                    b.Property<int?>("TimeForCompiling");
+
+                    b.Property<int?>("TimeForUserProgram");
+
+                    b.Property<int?>("TimeoutInMsUsed");
+
+                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
+
+                    b.HasIndex("TestId");
+
+                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
+
+                    b.ToTable("TestWithSingleSolutionAsTestResult");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<string>("Description")
+                        .HasMaxLength(500);
+
+                    b.Property<string>("DisplayName")
+                        .HasMaxLength(500);
+
+                    b.Property<string>("HtmlBackgroundColor")
+                        .HasMaxLength(500);
+
+                    b.Property<string>("HtmlColor")
+                        .HasMaxLength(500);
+
+                    b.Property<string>("HtmlIcon")
+                        .HasMaxLength(500);
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("DisplayName")
+                        .HasName("Unique_Tag");
+
+                    b.ToTable("Tags");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
+                {
+                    b.Property<int>("TagId");
+
+                    b.Property<int>("MetaDataId");
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.HasKey("TagId", "MetaDataId");
+
+                    b.HasIndex("MetaDataId");
+
+                    b.HasIndex("TagId");
+
+                    b.ToTable("TagWithMetaDatas");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<int?>("CodeTemplateId")
+                        .IsRequired();
+
+                    b.Property<string>("Content")
+                        .HasMaxLength(10000);
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<int>("DisplayIndex");
+
+                    b.Property<string>("FileNameWithExtension")
+                        .HasMaxLength(500);
+
+                    b.Property<bool>("IsContentVisibleForUser");
+
+                    b.Property<bool>("IsEditableByUser");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("CodeTemplateId");
+
+                    b.ToTable("TemplateFiles");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<string>("Content")
+                        .HasMaxLength(5000);
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<int>("DisplayIndex");
+
+                    b.Property<string>("DisplayName")
+                        .HasMaxLength(500);
+
+                    b.Property<int>("ExerciseReleaseId");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<int>("TestTypeId");
+
+                    b.Property<int>("UserId");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("TestTypeId");
+
+                    b.HasIndex("UserId", "ExerciseReleaseId");
+
+                    b.ToTable("CustomTest");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<byte[]>("Content");
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<int?>("CustomTestId")
+                        .IsRequired();
+
+                    b.Property<string>("DisplayName")
+                        .HasMaxLength(500);
+
+                    b.Property<string>("Hash")
+                        .HasMaxLength(500);
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<string>("MimeType")
+                        .HasMaxLength(500);
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("CustomTestId");
+
+                    b.ToTable("CustomTestAssets");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<int>("CompileTimeoutInMs");
+
+                    b.Property<string>("CompilerOptions")
+                        .HasMaxLength(500);
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<int>("ExerciseId");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<int>("MaxDiskSpaceInKb");
+
+                    b.Property<int>("MemoryLimitInKb");
+
+                    b.Property<int>("TimeoutInMs");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("ExerciseId")
+                        .IsUnique();
+
+                    b.ToTable("DefaultCustomTestSettings");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<string>("Content")
+                        .HasMaxLength(5000);
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<int>("DisplayIndex");
+
+                    b.Property<string>("DisplayName")
+                        .HasMaxLength(500);
+
+                    b.Property<int>("ExerciseId");
+
+                    b.Property<bool>("IsSubmitTest");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<int>("TestSettingsId");
+
+                    b.Property<int>("TestTypeId");
+
+                    b.Property<int>("Weight");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("ExerciseId");
+
+                    b.HasIndex("TestSettingsId")
+                        .IsUnique();
+
+                    b.HasIndex("TestTypeId");
+
+                    b.ToTable("Tests");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<byte[]>("Content");
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<string>("DisplayName")
+                        .HasMaxLength(500);
+
+                    b.Property<string>("Hash")
+                        .HasMaxLength(500);
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<string>("MimeType")
+                        .HasMaxLength(500);
+
+                    b.Property<int?>("TestId")
+                        .IsRequired();
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("TestId");
+
+                    b.ToTable("TestAssets");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<int>("CompileTimeoutInMs");
+
+                    b.Property<string>("CompilerOptions")
+                        .HasMaxLength(500);
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<int>("MaxDiskSpaceInKb");
+
+                    b.Property<int>("MemoryLimitInKb");
+
+                    b.Property<int>("TimeoutInMs");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("TestCaseSettingses");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<string>("DisplayName")
+                        .HasMaxLength(500);
+
+                    b.Property<string>("InternalName")
+                        .HasMaxLength(500);
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("TestTypes");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.TestWithFileAsAssetReference", b =>
+                {
+                    b.Property<int>("TestId");
+
+                    b.Property<int>("FileReferenceTestAssetId");
+
+                    b.HasKey("TestId", "FileReferenceTestAssetId");
+
+                    b.HasIndex("FileReferenceTestAssetId");
+
+                    b.HasIndex("TestId");
+
+                    b.ToTable("TestWithFileAsAssetReferences");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Files.FileReferenceMarkdownAsset", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<string>("Hash")
+                        .HasMaxLength(500);
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<string>("MimeType")
+                        .HasMaxLength(500);
+
+                    b.Property<string>("OriginalName")
+                        .HasMaxLength(500);
+
+                    b.Property<long>("SizeInBytes");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("FileReferenceMarkdownAssets");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Files.FileReferenceTestAsset", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<string>("Hash")
+                        .HasMaxLength(500);
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<string>("MimeType")
+                        .HasMaxLength(500);
+
+                    b.Property<string>("OriginalName")
+                        .HasMaxLength(500);
+
+                    b.Property<long>("SizeInBytes");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("FileReferenceTestAssets");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Files.FileReferenceUserFileAsset", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<string>("Hash")
+                        .HasMaxLength(500);
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<string>("MimeType")
+                        .HasMaxLength(500);
+
+                    b.Property<string>("OriginalName")
+                        .HasMaxLength(500);
+
+                    b.Property<long>("SizeInBytes");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("FileReferenceUserFileAssets");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Lang", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<string>("LangShortcut")
+                        .HasMaxLength(500);
+
+                    b.Property<string>("Language")
+                        .HasMaxLength(500);
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Langs");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.PLang", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<string>("DisplayName")
+                        .HasMaxLength(500);
+
+                    b.Property<string>("EditorHighlightModeName")
+                        .HasMaxLength(500);
+
+                    b.Property<string>("FileExtensionsWithDot")
+                        .HasMaxLength(500);
+
+                    b.Property<string>("InternalName")
+                        .HasMaxLength(500);
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("PLangs");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
+                {
+                    b.Property<int>("UserId");
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<string>("CsrfToken")
+                        .HasMaxLength(500);
+
+                    b.Property<DateTime>("ExpirationDateTime");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<string>("RandomSecret")
+                        .HasMaxLength(500);
+
+                    b.Property<string>("UserAuthToken")
+                        .HasMaxLength(500);
+
+                    b.HasKey("UserId");
+
+                    b.HasIndex("UserAuthToken")
+                        .IsUnique();
+
+                    b.HasIndex("UserId")
+                        .IsUnique();
+
+                    b.ToTable("AuthTokens");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
+                {
+                    b.Property<int>("ExternalId")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<string>("Email")
+                        .HasMaxLength(500);
+
+                    b.Property<string>("FirstName")
+                        .HasMaxLength(500);
+
+                    b.Property<string>("LastName")
+                        .HasMaxLength(500);
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<bool>("NeedToRefreshData");
+
+                    b.Property<string>("Token")
+                        .IsRequired()
+                        .HasMaxLength(500);
+
+                    b.Property<int>("UserId");
+
+                    b.HasKey("ExternalId");
+
+                    b.HasAlternateKey("Token")
+                        .HasName("Unique_ExternalToken");
+
+                    b.HasIndex("UserId")
+                        .IsUnique();
+
+                    b.ToTable("ExternalUsers");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<string>("DisplayName")
+                        .HasMaxLength(500);
+
+                    b.Property<int>("GroupRolePermissionId");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GroupRolePermissionId")
+                        .IsUnique();
+
+                    b.ToTable("GroupRoles");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<bool>("CanAddUserToGroup");
+
+                    b.Property<bool>("CanAssessExercises");
+
+                    b.Property<bool>("CanChangeExercises");
+
+                    b.Property<bool>("CanChangeGroupData");
+
+                    b.Property<bool>("CanChangeOtherMembersRole");
+
+                    b.Property<bool>("CanCreateExercises");
+
+                    b.Property<bool>("CanDeleteExercises");
+
+                    b.Property<bool>("CanLockExercisesPermanently");
+
+                    b.Property<bool>("CanReleaseExercises");
+
+                    b.Property<bool>("CanRemoveMemberFromGroup");
+
+                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
+
+                    b.Property<bool>("CanSeeOtherMembers");
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("GroupRolePermissions");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<int>("FontSize");
+
+                    b.Property<bool>("HighlightCurrentLine");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<bool>("ShowInvisibles");
+
+                    b.Property<bool>("ShowLineIndentions");
+
+                    b.Property<bool>("ShowLineNumbers");
+
+                    b.Property<int>("TabSize");
+
+                    b.Property<string>("Theme")
+                        .HasMaxLength(500);
+
+                    b.Property<bool>("UseWrapping");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("CodeEditorSettings");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<int>("CodeEditorSettingsId");
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<int?>("LangId");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<string>("Theme")
+                        .HasMaxLength(500);
+
+                    b.Property<int?>("UserId");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("CodeEditorSettingsId")
+                        .IsUnique();
+
+                    b.HasIndex("LangId");
+
+                    b.HasIndex("UserId")
+                        .IsUnique();
+
+                    b.ToTable("UserSettingses");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<string>("DisplayName")
+                        .HasMaxLength(500);
+
+                    b.Property<string>("Email")
+                        .HasMaxLength(500);
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<int>("SystemRolePermissionId");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("SystemRolePermissionId")
+                        .IsUnique();
+
+                    b.ToTable("SystemRoles");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<bool>("CanChangeOtherUsersSystemRole");
+
+                    b.Property<bool>("CanChangeRoles");
+
+                    b.Property<bool>("CanChangeSystemSettings");
+
+                    b.Property<bool>("CanChangeUserData");
+
+                    b.Property<bool>("CanCreateGroups");
+
+                    b.Property<bool>("CanCreateRoles");
+
+                    b.Property<bool>("CanDeleteActivatedUsers");
+
+                    b.Property<bool>("CanDeleteGroups");
+
+                    b.Property<bool>("CanDeleteRoles");
+
+                    b.Property<bool>("CanManageNewUsers");
+
+                    b.Property<bool>("CanManageTags");
+
+                    b.Property<bool>("CanViewDashboard");
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("SystemRolePermissions");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<string>("CurrentServerMessage")
+                        .HasMaxLength(1000);
+
+                    b.Property<int>("CustomProjectTestCompileTimeoutInMs");
+
+                    b.Property<int>("CustomProjectTestMaxDiskSpaceInKb");
+
+                    b.Property<int>("CustomProjectTestMemoryLimitInKb");
+
+                    b.Property<int>("CustomProjectTestTimeoutInMs");
+
+                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
+
+                    b.Property<int>("DefaultGroupRoleId");
+
+                    b.Property<int>("DefaultUserGroupId");
+
+                    b.Property<int>("JustRunProgramCompileTimeoutInMs");
+
+                    b.Property<int>("JustRunProgramMaxDiskSpaceInKb");
+
+                    b.Property<int>("JustRunProgramMemoryLimitInKb");
+
+                    b.Property<int>("JustRunProgramTimeoutInMs");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<int>("MaxCustomProjectsPerUser");
+
+                    b.Property<int>("MaxCustomTestsPerParticipation");
+
+                    b.Property<int>("MaxNumberOfTestsWithOneRequest");
+
+                    b.Property<int>("MaxNumberOfTestsWithOneRequestSubmitTestServer");
+
+                    b.Property<int>("SubmitTestServerTimeoutInMs");
+
+                    b.Property<string>("SubmitTestServerUrl")
+                        .HasMaxLength(500);
+
+                    b.Property<string>("TestServerConfigUiUrl")
+                        .HasMaxLength(500);
+
+                    b.Property<string>("TestServerStatsUrl")
+                        .HasMaxLength(500);
+
+                    b.Property<int>("TestServerTimeoutInMs");
+
+                    b.Property<string>("TestServerUrl")
+                        .HasMaxLength(500);
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
+                        .IsUnique();
+
+                    b.HasIndex("DefaultGroupRoleId")
+                        .IsUnique();
+
+                    b.HasIndex("DefaultUserGroupId")
+                        .IsUnique();
+
+                    b.ToTable("SystemSettings");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<string>("Email")
+                        .HasMaxLength(500);
+
+                    b.Property<string>("FirstName")
+                        .HasMaxLength(500);
+
+                    b.Property<bool>("IsActivated");
+
+                    b.Property<DateTime>("LastLoginAt");
+
+                    b.Property<string>("LastName")
+                        .HasMaxLength(500);
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<string>("Password")
+                        .HasMaxLength(500);
+
+                    b.Property<int?>("SystemRoleId");
+
+                    b.Property<string>("Token")
+                        .IsRequired()
+                        .HasMaxLength(500);
+
+                    b.HasKey("Id");
+
+                    b.HasAlternateKey("Token")
+                        .HasName("Unique_Token");
+
+                    b.HasIndex("SystemRoleId");
+
+                    b.ToTable("Users");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<string>("DisplayName")
+                        .HasMaxLength(500);
+
+                    b.Property<string>("Email")
+                        .HasMaxLength(500);
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("UserGroups");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
+                {
+                    b.Property<int>("UserId");
+
+                    b.Property<int>("UserGroupId");
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<int>("GroupRoleId");
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.HasKey("UserId", "UserGroupId");
+
+                    b.HasIndex("GroupRoleId");
+
+                    b.HasIndex("UserGroupId");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("UserWithUserGroups");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
+                {
+                    b.HasOne("ClientServer.Models.Users.User", "User")
+                        .WithMany("CustomProjects")
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
+                {
+                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
+                        .WithOne("Description")
+                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescriptionWithFileAsAssetReference", b =>
+                {
+                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectDescription")
+                        .WithMany("AssetReferences")
+                        .HasForeignKey("CustomProjectDescriptionId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.HasOne("ClientServer.Models.Files.FileReferenceUserFileAsset", "FileReferenceUserFileAsset")
+                        .WithMany("CustomProjectDescriptionWithFileAsAssetReferences")
+                        .HasForeignKey("FileReferenceUserFileAssetId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
+                {
+                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
+                        .WithMany("Solutions")
+                        .HasForeignKey("CustomProjectId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
+                        .WithOne()
+                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
+                        .OnDelete(DeleteBehavior.SetNull);
+
+                    b.HasOne("ClientServer.Models.PLang", "PLang")
+                        .WithMany()
+                        .HasForeignKey("PLangId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
+                {
+                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
+                        .WithMany("SolutionFiles")
+                        .HasForeignKey("CustomProjectSolutionId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
+                {
+                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
+                        .WithMany("Tests")
+                        .HasForeignKey("CustomProjectId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
+                        .WithOne()
+                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
+                        .WithMany()
+                        .HasForeignKey("TestTypeId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
+                {
+                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
+                        .WithMany("TestAssets")
+                        .HasForeignKey("CustomProjectTestId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithFileAsAssetReference", b =>
+                {
+                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
+                        .WithMany("AssetReferences")
+                        .HasForeignKey("CustomProjectTestId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.HasOne("ClientServer.Models.Files.FileReferenceUserFileAsset", "FileReferenceUserFileAsset")
+                        .WithMany("CustomProjectTestWithFileAsAssetReferences")
+                        .HasForeignKey("FileReferenceUserFileAssetId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
+                {
+                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
+                        .WithMany("TestResults")
+                        .HasForeignKey("CustomProjectSolutionId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
+                        .WithMany("TestResults")
+                        .HasForeignKey("CustomProjectTestId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
+                {
+                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
+                        .WithOne()
+                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
+                        .OnDelete(DeleteBehavior.SetNull);
+
+                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
+                        .WithOne("AfterSolution")
+                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
+                {
+                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
+                        .WithMany("SolutionFiles")
+                        .HasForeignKey("AfterSolutionId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
+                        .WithMany()
+                        .HasForeignKey("TemplateFileId");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
+                {
+                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
+                        .WithMany("CustomTestResults")
+                        .HasForeignKey("AfterSolutionId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
+                        .WithMany("AfterTestResults")
+                        .HasForeignKey("CustomTestId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
+                {
+                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
+                        .WithMany("TestResults")
+                        .HasForeignKey("AfterSolutionId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
+                        .WithMany("AfterTestResults")
+                        .HasForeignKey("TestId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
+                {
+                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
+                        .WithMany("Assets")
+                        .HasForeignKey("CustomProjectDescriptionId");
+
+                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
+                        .WithMany("Assets")
+                        .HasForeignKey("ExerciseDescriptionId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
+                {
+                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
+                        .WithMany("CodeTemplates")
+                        .HasForeignKey("ExerciseId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
+                        .WithOne()
+                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
+                        .OnDelete(DeleteBehavior.SetNull);
+
+                    b.HasOne("ClientServer.Models.PLang", "PLang")
+                        .WithMany()
+                        .HasForeignKey("PLangId");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.CustomTestWithFileAsAssetReference", b =>
+                {
+                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
+                        .WithMany("AssetReferences")
+                        .HasForeignKey("CustomTestId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.HasOne("ClientServer.Models.Files.FileReferenceUserFileAsset", "FileReferenceUserFileAsset")
+                        .WithMany("CustomTestWithFileAsAssetReferences")
+                        .HasForeignKey("FileReferenceUserFileAssetId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
+                {
+                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
+                        .WithMany("Exercises")
+                        .HasForeignKey("UserGroupId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.HasOne("ClientServer.Models.Users.User", "User")
+                        .WithMany("Exercises")
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.SetNull);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
+                {
+                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
+                        .WithOne("Description")
+                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescriptionWithFileAsAssetReference", b =>
+                {
+                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseDescription")
+                        .WithMany("AssetReferences")
+                        .HasForeignKey("ExerciseDescriptionId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.HasOne("ClientServer.Models.Files.FileReferenceMarkdownAsset", "FileReferenceMarkdownAsset")
+                        .WithMany("AssetReferences")
+                        .HasForeignKey("FileReferenceMarkdownAssetId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
+                {
+                    b.HasOne("ClientServer.Models.Exercises.Exercise")
+                        .WithOne("MetaData")
+                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
+                        .WithMany()
+                        .HasForeignKey("ExerciseId1");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
+                {
+                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
+                        .WithMany("Releases")
+                        .HasForeignKey("ExerciseId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.HasOne("ClientServer.Models.PLang", "PLang")
+                        .WithMany()
+                        .HasForeignKey("PLangId");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
+                {
+                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
+                        .WithMany("TestResultsNew")
+                        .HasForeignKey("CustomTestId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
+                        .WithMany("CustomTestResults")
+                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
+                {
+                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
+                        .WithMany("ExerciseReleaseWithUserAsParticipations")
+                        .HasForeignKey("ExerciseReleaseId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
+                        .WithMany()
+                        .HasForeignKey("LastEditedPLangId");
+
+                    b.HasOne("ClientServer.Models.Users.User", "User")
+                        .WithMany("ExerciseReleaseWithUserAsParticipations")
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
+                {
+                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
+                        .WithOne("Solution")
+                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
+                        .WithOne()
+                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
+                        .OnDelete(DeleteBehavior.SetNull);
+
+                    b.HasOne("ClientServer.Models.PLang", "PLang")
+                        .WithMany()
+                        .HasForeignKey("PLangId");
+
+                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
+                        .WithMany("Solutions")
+                        .HasForeignKey("UserId", "ExerciseReleaseId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
+                {
+                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
+                        .WithMany("SolutionParts")
+                        .HasForeignKey("TemplateFileId")
+                        .OnDelete(DeleteBehavior.SetNull);
+
+                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
+                        .WithMany("SolutionFiles")
+                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
+                {
+                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
+                        .WithMany("TestResultsNew")
+                        .HasForeignKey("TestId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
+                        .WithMany("TestResults")
+                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
+                {
+                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
+                        .WithMany("TagWithMetaDatas")
+                        .HasForeignKey("MetaDataId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
+                        .WithMany()
+                        .HasForeignKey("TagId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
+                {
+                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
+                        .WithMany("TemplateFiles")
+                        .HasForeignKey("CodeTemplateId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
+                {
+                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
+                        .WithMany()
+                        .HasForeignKey("TestTypeId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
+                        .WithMany("CustomTests")
+                        .HasForeignKey("UserId", "ExerciseReleaseId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
+                {
+                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
+                        .WithMany("TestAssets")
+                        .HasForeignKey("CustomTestId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
+                {
+                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
+                        .WithOne("DefaultCustomTestSettings")
+                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
+                {
+                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
+                        .WithMany("Tests")
+                        .HasForeignKey("ExerciseId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
+                        .WithOne()
+                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
+                        .WithMany()
+                        .HasForeignKey("TestTypeId");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
+                {
+                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
+                        .WithMany("TestAssets")
+                        .HasForeignKey("TestId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Exercises.TestWithFileAsAssetReference", b =>
+                {
+                    b.HasOne("ClientServer.Models.Files.FileReferenceTestAsset", "FileReferenceTestAsset")
+                        .WithMany("AssetReferences")
+                        .HasForeignKey("FileReferenceTestAssetId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
+                        .WithMany("AssetReferences")
+                        .HasForeignKey("TestId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
+                {
+                    b.HasOne("ClientServer.Models.Users.User", "User")
+                        .WithOne()
+                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
+                {
+                    b.HasOne("ClientServer.Models.Users.User", "User")
+                        .WithOne("ExternalUser")
+                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
+                {
+                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
+                        .WithOne()
+                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
+                {
+                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
+                        .WithOne()
+                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.HasOne("ClientServer.Models.Lang", "Lang")
+                        .WithMany()
+                        .HasForeignKey("LangId")
+                        .OnDelete(DeleteBehavior.SetNull);
+
+                    b.HasOne("ClientServer.Models.Users.User", "User")
+                        .WithOne("UserSettings")
+                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
+                {
+                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
+                        .WithOne()
+                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
+                {
+                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
+                        .WithOne()
+                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId");
+
+                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
+                        .WithOne()
+                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId");
+
+                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
+                        .WithOne()
+                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
+                {
+                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
+                        .WithMany()
+                        .HasForeignKey("SystemRoleId")
+                        .OnDelete(DeleteBehavior.SetNull);
+                });
+
+            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
+                {
+                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
+                        .WithMany("UserUserGroups")
+                        .HasForeignKey("GroupRoleId");
+
+                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
+                        .WithMany("UserWithUserGroups")
+                        .HasForeignKey("UserGroupId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.HasOne("ClientServer.Models.Users.User", "User")
+                        .WithMany("UserWithUserGroups")
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+        }
+    }
+}
diff --git a/src/ClientServer/Migrations/20190606164356_RemoveAssetPathsAddedCompilerOptions.cs b/src/ClientServer/Migrations/20190606164356_RemoveAssetPathsAddedCompilerOptions.cs
new file mode 100755
index 0000000000000000000000000000000000000000..27c7a57b56916fe0126a4afa3e95d8336151be65
--- /dev/null
+++ b/src/ClientServer/Migrations/20190606164356_RemoveAssetPathsAddedCompilerOptions.cs
@@ -0,0 +1,65 @@
+using System;
+using System.Collections.Generic;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+namespace ClientServer.Migrations
+{
+    public partial class RemoveAssetPathsAddedCompilerOptions : Migration
+    {
+        protected override void Up(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.DropColumn(
+                name: "RelativePath",
+                table: "FileReferenceUserFileAssets");
+
+            migrationBuilder.DropColumn(
+                name: "RelativePath",
+                table: "FileReferenceTestAssets");
+
+            migrationBuilder.DropColumn(
+                name: "RelativePath",
+                table: "FileReferenceMarkdownAssets");
+
+            migrationBuilder.AddColumn<string>(
+                name: "CompilerOptions",
+                table: "TestCaseSettingses",
+                maxLength: 500,
+                nullable: true);
+
+            migrationBuilder.AddColumn<string>(
+                name: "CompilerOptions",
+                table: "DefaultCustomTestSettings",
+                maxLength: 500,
+                nullable: true);
+        }
+
+        protected override void Down(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.DropColumn(
+                name: "CompilerOptions",
+                table: "TestCaseSettingses");
+
+            migrationBuilder.DropColumn(
+                name: "CompilerOptions",
+                table: "DefaultCustomTestSettings");
+
+            migrationBuilder.AddColumn<string>(
+                name: "RelativePath",
+                table: "FileReferenceUserFileAssets",
+                maxLength: 5000,
+                nullable: true);
+
+            migrationBuilder.AddColumn<string>(
+                name: "RelativePath",
+                table: "FileReferenceTestAssets",
+                maxLength: 5000,
+                nullable: true);
+
+            migrationBuilder.AddColumn<string>(
+                name: "RelativePath",
+                table: "FileReferenceMarkdownAssets",
+                maxLength: 5000,
+                nullable: true);
+        }
+    }
+}
diff --git a/src/ClientServer/Migrations/SyndromDbContextModelSnapshot.cs b/src/ClientServer/Migrations/SyndromDbContextModelSnapshot.cs
index 206509ef48da8360caf9c54bf3a8769344279b31..d2e05915d526814733728d0a8e63c7c1748c341d 100644
--- a/src/ClientServer/Migrations/SyndromDbContextModelSnapshot.cs
+++ b/src/ClientServer/Migrations/SyndromDbContextModelSnapshot.cs
@@ -1041,6 +1041,9 @@ namespace ClientServer.Migrations
 
                     b.Property<int>("CompileTimeoutInMs");
 
+                    b.Property<string>("CompilerOptions")
+                        .HasMaxLength(500);
+
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<int>("ExerciseId");
@@ -1137,6 +1140,9 @@ namespace ClientServer.Migrations
 
                     b.Property<int>("CompileTimeoutInMs");
 
+                    b.Property<string>("CompilerOptions")
+                        .HasMaxLength(500);
+
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<DateTime>("LastUpdatedAt");
@@ -1205,9 +1211,6 @@ namespace ClientServer.Migrations
                     b.Property<string>("OriginalName")
                         .HasMaxLength(500);
 
-                    b.Property<string>("RelativePath")
-                        .HasMaxLength(5000);
-
                     b.Property<long>("SizeInBytes");
 
                     b.HasKey("Id");
@@ -1233,9 +1236,6 @@ namespace ClientServer.Migrations
                     b.Property<string>("OriginalName")
                         .HasMaxLength(500);
 
-                    b.Property<string>("RelativePath")
-                        .HasMaxLength(5000);
-
                     b.Property<long>("SizeInBytes");
 
                     b.HasKey("Id");
@@ -1261,9 +1261,6 @@ namespace ClientServer.Migrations
                     b.Property<string>("OriginalName")
                         .HasMaxLength(500);
 
-                    b.Property<string>("RelativePath")
-                        .HasMaxLength(5000);
-
                     b.Property<long>("SizeInBytes");
 
                     b.HasKey("Id");
diff --git a/src/ClientServer/Models/Exercises/Tests/DefaultCustomTestSettings.cs b/src/ClientServer/Models/Exercises/Tests/DefaultCustomTestSettings.cs
index 70ecc3d4f3dfb51708fe37b06445062c4d20c458..23f8fb85cc274ed8f26138804608e81ee35b0000 100644
--- a/src/ClientServer/Models/Exercises/Tests/DefaultCustomTestSettings.cs
+++ b/src/ClientServer/Models/Exercises/Tests/DefaultCustomTestSettings.cs
@@ -1,7 +1,9 @@
 using System;
 using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
 using System.Linq;
 using System.Threading.Tasks;
+using ClientServer.Db;
 using ClientServer.Models.Interfaces;
 
 namespace ClientServer.Models.Exercises.Tests
@@ -31,6 +33,12 @@ namespace ClientServer.Models.Exercises.Tests
         /// the max amount of disk space the <see cref="Test"/> can write to
         /// </summary>
         public int MaxDiskSpaceInKb { get; set; }
+        
+        /// <summary>
+        /// some compiler options .g. -Xlint options needs to be separated by whitespaces (like normal command args)
+        /// </summary>
+        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        public string CompilerOptions { get; set; }
 
 
         public int ExerciseId { get; set; }
diff --git a/src/ClientServer/Models/Exercises/Tests/TestSettings.cs b/src/ClientServer/Models/Exercises/Tests/TestSettings.cs
index be0a0a86eea206a7ca5383cbde5a6a3f29a74778..9c9c1c54361c99be7ca9fe12b21fe69c249d9a5e 100644
--- a/src/ClientServer/Models/Exercises/Tests/TestSettings.cs
+++ b/src/ClientServer/Models/Exercises/Tests/TestSettings.cs
@@ -1,4 +1,6 @@
-using ClientServer.Models.Interfaces;
+using System.ComponentModel.DataAnnotations;
+using ClientServer.Db;
+using ClientServer.Models.Interfaces;
 
 namespace ClientServer.Models.Exercises.Tests
 {
@@ -28,5 +30,11 @@ namespace ClientServer.Models.Exercises.Tests
         /// the max amount of disk space the <see cref="Test"/> can write to
         /// </summary>
         public int MaxDiskSpaceInKb { get; set; }
+
+        /// <summary>
+        /// some compiler options .g. -Xlint options needs to be separated by whitespaces (like normal command args)
+        /// </summary>
+        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        public string CompilerOptions { get; set; }
     }
 }
diff --git a/src/ClientServer/Models/Files/FileReferenceMarkdownAsset.cs b/src/ClientServer/Models/Files/FileReferenceMarkdownAsset.cs
index 734acfdad66b6965dc577782fa39ab6a5237de21..9b8bb08fe690cd4b41fb283601e8eecd1479216e 100644
--- a/src/ClientServer/Models/Files/FileReferenceMarkdownAsset.cs
+++ b/src/ClientServer/Models/Files/FileReferenceMarkdownAsset.cs
@@ -26,16 +26,6 @@ namespace ClientServer.Models.Files
         /// </summary>
         [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
         public string Hash { get; set; }
-        
-        /// <summary>
-        /// the file path relative to the base file upload dir
-        /// normally <see cref="AppConfiguration.FileUploadDirRelativePath"/> combined with one of
-        ///   <see cref="AppConfiguration.MarkdownAssetFilesUploadDirName"/> or 
-        ///   <see cref="AppConfiguration.TestAssetFilesUploadDirName"/> or
-        ///   <see cref="AppConfiguration.UserAssetFilesUploadDirName"/>
-        /// </summary>
-        [MaxLength(SyndromDbContext.PathsMaxStringLength)]
-        public string RelativePath { get; set; }
 
         /// <summary>
         /// original name of the file (at the time the file was uploaded)
diff --git a/src/ClientServer/Models/Files/FileReferenceTestAsset.cs b/src/ClientServer/Models/Files/FileReferenceTestAsset.cs
index a9f960f821f00d3a4802b322ffa680896be7239b..78133c3314e4ffc38d0e66b6f7a1640599ed8072 100644
--- a/src/ClientServer/Models/Files/FileReferenceTestAsset.cs
+++ b/src/ClientServer/Models/Files/FileReferenceTestAsset.cs
@@ -16,22 +16,17 @@ namespace ClientServer.Models.Files
     {
         public int Id { get; set; }
 
+        public FileReferenceTestAsset()
+        {
+            AssetReferences = new List<TestWithFileAsAssetReference>();
+        }
+
         /// <summary>
         /// md5 hash of the file content
         /// </summary>
         [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
         public string Hash { get; set; }
         
-        /// <summary>
-        /// the file path relative to the base file upload dir
-        /// normally <see cref="AppConfiguration.FileUploadDirRelativePath"/> combined with one of
-        ///   <see cref="AppConfiguration.MarkdownAssetFilesUploadDirName"/> or 
-        ///   <see cref="AppConfiguration.TestAssetFilesUploadDirName"/> or
-        ///   <see cref="AppConfiguration.UserAssetFilesUploadDirName"/>
-        /// </summary>
-        [MaxLength(SyndromDbContext.PathsMaxStringLength)]
-        public string RelativePath { get; set; }
-
         /// <summary>
         /// original name of the file (at the time the file was uploaded)
         /// </summary>
diff --git a/src/ClientServer/Models/Files/FileReferenceUserFileAsset.cs b/src/ClientServer/Models/Files/FileReferenceUserFileAsset.cs
index c96f9288bbe3a466099f0221040563579fbe73d9..7edfb1af98afc2de5e2e2ebd78458d8df2784a79 100644
--- a/src/ClientServer/Models/Files/FileReferenceUserFileAsset.cs
+++ b/src/ClientServer/Models/Files/FileReferenceUserFileAsset.cs
@@ -17,22 +17,19 @@ namespace ClientServer.Models.Files
     {
         public int Id { get; set; }
 
+        public FileReferenceUserFileAsset()
+        {
+            CustomTestWithFileAsAssetReferences = new List<CustomTestWithFileAsAssetReference>();
+            CustomProjectTestWithFileAsAssetReferences = new List<CustomProjectTestWithFileAsAssetReference>();
+            CustomProjectDescriptionWithFileAsAssetReferences = new List<CustomProjectDescriptionWithFileAsAssetReference>();
+        }
+
         /// <summary>
         /// md5 hash of the file content
         /// </summary>
         [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
         public string Hash { get; set; }
         
-        /// <summary>
-        /// the file path relative to the base file upload dir
-        /// normally <see cref="AppConfiguration.FileUploadDirRelativePath"/> combined with one of
-        ///   <see cref="AppConfiguration.MarkdownAssetFilesUploadDirName"/> or 
-        ///   <see cref="AppConfiguration.TestAssetFilesUploadDirName"/> or
-        ///   <see cref="AppConfiguration.UserAssetFilesUploadDirName"/>
-        /// </summary>
-        [MaxLength(SyndromDbContext.PathsMaxStringLength)]
-        public string RelativePath { get; set; }
-
         /// <summary>
         /// original name of the file (at the time the file was uploaded)
         /// </summary>
diff --git a/src/ClientServer/Models/Interfaces/ITestSettings.cs b/src/ClientServer/Models/Interfaces/ITestSettings.cs
index 112033d9cb6d4fd2dfe033a3beefa054a3105f31..07d71b2b4a9eec449155ff44a6d26409b2bf0acd 100644
--- a/src/ClientServer/Models/Interfaces/ITestSettings.cs
+++ b/src/ClientServer/Models/Interfaces/ITestSettings.cs
@@ -23,5 +23,10 @@ namespace ClientServer.Models.Interfaces
         /// the max amount of disk space the <see cref="Test"/> can write to
         /// </summary>
         int MaxDiskSpaceInKb { get; set; }
+        
+        /// <summary>
+        /// some compiler options .g. -Xlint options needs to be separated by whitespaces (like normal command args)
+        /// </summary>
+        string CompilerOptions { get; set; }
     }
 }