// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { DataMigration.Initialize(app.ApplicationServices); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.UseCors("CorsPolicy"); app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"); c.RoutePrefix = string.Empty; }); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
public void CreateDataMigration(string featureName) { Context.Output.WriteLine(T("Creating Data Migration for {0}", featureName)); ExtensionDescriptor extensionDescriptor = _extensionManager.AvailableExtensions().FirstOrDefault(extension => DefaultExtensionTypes.IsModule(extension.ExtensionType) && extension.Features.Any(feature => String.Equals(feature.Id, featureName, StringComparison.OrdinalIgnoreCase))); if (extensionDescriptor == null) { Context.Output.WriteLine(T("Creating data migration failed: target Feature {0} could not be found.", featureName)); return; } string dataMigrationFolderPath = HostingEnvironment.MapPath("~/Modules/" + extensionDescriptor.Id + "/"); string dataMigrationFilePath = dataMigrationFolderPath + "Migrations.cs"; string moduleCsProjPath = HostingEnvironment.MapPath(string.Format("~/Modules/{0}/{0}.csproj", extensionDescriptor.Id)); if (!Directory.Exists(dataMigrationFolderPath)) { Directory.CreateDirectory(dataMigrationFolderPath); } if (File.Exists(dataMigrationFilePath)) { Context.Output.WriteLine(T("Data migration already exists in target Module {0}.", extensionDescriptor.Id)); return; } List <SchemaCommand> commands = _schemaCommandGenerator.GetCreateFeatureCommands(featureName, false).ToList(); string dataMigrationText; using (var stringWriter = new StringWriter()) { var interpreter = new CodeGenerationCommandInterpreter(stringWriter); foreach (var command in commands) { interpreter.Visit(command); stringWriter.WriteLine(); } var migrationTemplate = new DataMigration { Session = new Dictionary <string, object>() }; migrationTemplate.Session["FeatureName"] = featureName; migrationTemplate.Session["Commands"] = stringWriter.ToString(); migrationTemplate.Initialize(); dataMigrationText = migrationTemplate.TransformText(); } File.WriteAllText(dataMigrationFilePath, dataMigrationText); string projectFileText = File.ReadAllText(moduleCsProjPath); // The string searches in solution/project files can be made aware of comment lines. if (projectFileText.Contains("<Compile Include")) { string compileReference = string.Format("<Compile Include=\"{0}\" />\r\n ", "Migrations.cs"); projectFileText = projectFileText.Insert(projectFileText.LastIndexOf("<Compile Include"), compileReference); } else { string itemGroupReference = string.Format("</ItemGroup>\r\n <ItemGroup>\r\n <Compile Include=\"{0}\" />\r\n ", "Migrations.cs"); projectFileText = projectFileText.Insert(projectFileText.LastIndexOf("</ItemGroup>"), itemGroupReference); } File.WriteAllText(moduleCsProjPath, projectFileText); TouchSolution(Context.Output); Context.Output.WriteLine(T("Data migration created successfully in Module {0}", extensionDescriptor.Id)); }