public string ReportRevEngErrors(ReverseEngineerResult revEngResult, string missingProviderPackage) { var errors = new StringBuilder(); if (revEngResult.EntityErrors.Count == 0) { errors.Append("Model generated successfully." + Environment.NewLine); } else { errors.Append("Please check the output window for errors" + Environment.NewLine); } if (revEngResult.EntityWarnings.Count > 0) { errors.Append("Please check the output window for warnings" + Environment.NewLine); } if (!string.IsNullOrEmpty(missingProviderPackage)) { errors.AppendLine(); errors.AppendFormat("The \"{0}\" NuGet package was not found in the project - it must be installed in order to build.", missingProviderPackage); } return(errors.ToString()); }
public string ReportRevEngErrors(ReverseEngineerResult revEngResult, string missingProviderPackage) { var errors = new StringBuilder(); if (revEngResult.EntityErrors.Count == 0) { errors.Append(ReverseEngineerLocale.ModelGeneratedSuccesfully + Environment.NewLine); } else { errors.Append(ReverseEngineerLocale.CheckOutputWindowForErrors + Environment.NewLine); } if (revEngResult.EntityWarnings.Count > 0) { errors.Append(ReverseEngineerLocale.CheckOutputWindowForWarnings + Environment.NewLine); } if (!string.IsNullOrEmpty(missingProviderPackage)) { errors.AppendLine(); errors.AppendFormat(String.Format(ReverseEngineerLocale.PackageNotFoundInProject, missingProviderPackage)); } return(errors.ToString()); }
public static string Write(this ReverseEngineerResult result) { using (var ms = new MemoryStream()) { using (var writer = JsonReaderWriterFactory.CreateJsonWriter(ms, Encoding.UTF8, true, true, " ")) { var serializer = new DataContractJsonSerializer(typeof(ReverseEngineerResult)); serializer.WriteObject(writer, result); writer.Flush(); } var json = ms.ToArray(); return(Encoding.UTF8.GetString(json, 0, json.Length)); } }
public static ReverseEngineerResult GenerateFiles(ReverseEngineerCommandOptions options) { var errors = new List <string>(); var warnings = new List <string>(); var reporter = new OperationReporter( new OperationReportHandler( m => errors.Add(m), m => warnings.Add(m))); var serviceProvider = ServiceProviderBuilder.Build(options); var scaffolder = serviceProvider.GetService <IReverseEngineerScaffolder>(); var schemas = new List <string>(); options.ConnectionString = SqlServerHelper.SetConnectionString(options.DatabaseType, options.ConnectionString); if (options.DefaultDacpacSchema != null) { schemas.Add(options.DefaultDacpacSchema); } if (options.FilterSchemas) { schemas.AddRange(options.Schemas.Select(s => s.Name)); } if (options.UseNoObjectFilter) { options.Tables = new List <SerializationTableModel>(); } var outputDir = !string.IsNullOrEmpty(options.OutputPath) ? Path.IsPathFullyQualified(options.OutputPath) ? options.OutputPath : Path.GetFullPath(Path.Combine(options.ProjectPath, options.OutputPath)) : options.ProjectPath; var outputContextDir = !string.IsNullOrEmpty(options.OutputContextPath) ? Path.IsPathFullyQualified(options.OutputContextPath) ? options.OutputContextPath : Path.GetFullPath(Path.Combine(options.ProjectPath, options.OutputContextPath)) : outputDir; var modelNamespace = string.Empty; var contextNamespace = string.Empty; if (string.IsNullOrEmpty(options.ProjectRootNamespace)) { modelNamespace = !string.IsNullOrEmpty(options.ModelNamespace) ? options.ModelNamespace : PathHelper.GetNamespaceFromOutputPath(outputDir, options.ProjectPath, options.ProjectRootNamespace); contextNamespace = !string.IsNullOrEmpty(options.ContextNamespace) ? options.ContextNamespace : PathHelper.GetNamespaceFromOutputPath(outputContextDir, options.ProjectPath, options.ProjectRootNamespace); } else { modelNamespace = !string.IsNullOrEmpty(options.ModelNamespace) ? options.ProjectRootNamespace + "." + options.ModelNamespace : PathHelper.GetNamespaceFromOutputPath(outputDir, options.ProjectPath, options.ProjectRootNamespace); contextNamespace = !string.IsNullOrEmpty(options.ContextNamespace) ? options.ProjectRootNamespace + "." + options.ContextNamespace : PathHelper.GetNamespaceFromOutputPath(outputContextDir, options.ProjectPath, options.ProjectRootNamespace); } var entityTypeConfigurationPaths = new List <string>(); SavedModelFiles procedurePaths = null; SavedModelFiles functionPaths = null; SavedModelFiles filePaths = ReverseEngineerScaffolder.GenerateDbContext(options, serviceProvider, schemas, outputContextDir, modelNamespace, contextNamespace); if (options.SelectedToBeGenerated != 2) { procedurePaths = ReverseEngineerScaffolder.GenerateStoredProcedures(options, ref errors, serviceProvider, outputContextDir, modelNamespace, contextNamespace); functionPaths = ReverseEngineerScaffolder.GenerateFunctions(options, ref errors, serviceProvider, outputContextDir, modelNamespace, contextNamespace); #if CORE50 #else RemoveOnConfiguring(filePaths.ContextFile, options.IncludeConnectionString); #endif PostProcess(filePaths.ContextFile); entityTypeConfigurationPaths = SplitDbContext(filePaths.ContextFile, options.UseDbContextSplitting, contextNamespace, options.UseNullableReferences); } else if (options.SelectedToBeGenerated == 2 && (options.Tables.Count(t => t.ObjectType == ObjectType.Procedure) > 0 || options.Tables.Count(t => t.ObjectType == ObjectType.ScalarFunction) > 0)) { warnings.Add("Selected stored procedures/scalar functions will not be generated, as 'Entity Types only' was selected"); } foreach (var file in filePaths.AdditionalFiles) { PostProcess(file); } var cleanUpPaths = CreateCleanupPaths(procedurePaths, functionPaths, filePaths); CleanUp(cleanUpPaths, entityTypeConfigurationPaths); var allfiles = filePaths.AdditionalFiles.ToList(); if (procedurePaths != null) { allfiles.AddRange(procedurePaths.AdditionalFiles); allfiles.Add(procedurePaths.ContextFile); } if (functionPaths != null) { allfiles.AddRange(functionPaths.AdditionalFiles); allfiles.Add(functionPaths.ContextFile); } var result = new ReverseEngineerResult { EntityErrors = errors, EntityWarnings = warnings, EntityTypeFilePaths = allfiles, ContextFilePath = filePaths.ContextFile, ContextConfigurationFilePaths = entityTypeConfigurationPaths, }; return(result); }
public ReverseEngineerResult GenerateFiles(ReverseEngineerCommandOptions reverseEngineerOptions) { var errors = new List<string>(); var warnings = new List<string>(); var reporter = new OperationReporter( new OperationReportHandler( m => errors.Add(m), m => warnings.Add(m))); var serviceProvider = ServiceProviderBuilder.Build(reverseEngineerOptions); var scaffolder = serviceProvider.GetService<IReverseEngineerScaffolder>(); var schemas = new List<string>(); if (reverseEngineerOptions.DefaultDacpacSchema != null) { schemas.Add(reverseEngineerOptions.DefaultDacpacSchema); } if (reverseEngineerOptions.FilterSchemas) { schemas.AddRange(reverseEngineerOptions.Schemas.Select(s => s.Name)); } var outputDir = !string.IsNullOrEmpty(reverseEngineerOptions.OutputPath) ? Path.IsPathFullyQualified(reverseEngineerOptions.OutputPath) ? reverseEngineerOptions.OutputPath : Path.GetFullPath(Path.Combine(reverseEngineerOptions.ProjectPath, reverseEngineerOptions.OutputPath)) : reverseEngineerOptions.ProjectPath; var outputContextDir = !string.IsNullOrEmpty(reverseEngineerOptions.OutputContextPath) ? Path.IsPathFullyQualified(reverseEngineerOptions.OutputContextPath) ? reverseEngineerOptions.OutputContextPath : Path.GetFullPath(Path.Combine(reverseEngineerOptions.ProjectPath, reverseEngineerOptions.OutputContextPath)) : outputDir; var modelNamespace = !string.IsNullOrEmpty(reverseEngineerOptions.ModelNamespace) ? reverseEngineerOptions.ProjectRootNamespace + "." + reverseEngineerOptions.ModelNamespace : PathHelper.GetNamespaceFromOutputPath(outputDir, reverseEngineerOptions.ProjectPath, reverseEngineerOptions.ProjectRootNamespace); var contextNamespace = !string.IsNullOrEmpty(reverseEngineerOptions.ContextNamespace) ? reverseEngineerOptions.ProjectRootNamespace + "." + reverseEngineerOptions.ContextNamespace : PathHelper.GetNamespaceFromOutputPath(outputContextDir, reverseEngineerOptions.ProjectPath, reverseEngineerOptions.ProjectRootNamespace); SavedModelFiles procedurePaths = null; var procedureModelScaffolder = serviceProvider.GetService<IProcedureScaffolder>(); if (procedureModelScaffolder != null && reverseEngineerOptions.Tables.Where(t => t.ObjectType == RevEng.Shared.ObjectType.Procedure).Count() > 0) { var procedureOptions = new ProcedureScaffolderOptions { ContextDir = outputContextDir, ContextName = reverseEngineerOptions.ContextClassName, ContextNamespace = contextNamespace, ModelNamespace = modelNamespace, }; var procedureModelOptions = new ProcedureModelFactoryOptions { FullModel = true, Procedures = reverseEngineerOptions.Tables.Where(t => t.ObjectType == RevEng.Shared.ObjectType.Procedure).Select(m => m.Name), }; var procedureModel = procedureModelScaffolder.ScaffoldModel(reverseEngineerOptions.ConnectionString, procedureOptions, procedureModelOptions, ref errors); if (procedureModel != null) { procedurePaths = procedureModelScaffolder.Save( procedureModel, Path.GetFullPath(Path.Combine(reverseEngineerOptions.ProjectPath, reverseEngineerOptions.OutputPath ?? string.Empty)), contextNamespace); } } var modelOptions = new ModelReverseEngineerOptions { UseDatabaseNames = reverseEngineerOptions.UseDatabaseNames, #if CORE50 NoPluralize = !reverseEngineerOptions.UseInflector, #endif }; var codeOptions = new ModelCodeGenerationOptions { UseDataAnnotations = !reverseEngineerOptions.UseFluentApiOnly, Language = "C#", ContextName = reverseEngineerOptions.ContextClassName, ContextDir = outputContextDir, RootNamespace = null, ContextNamespace = contextNamespace, ModelNamespace = modelNamespace, SuppressConnectionStringWarning = false, ConnectionString = reverseEngineerOptions.ConnectionString, #if CORE50 SuppressOnConfiguring = !reverseEngineerOptions.IncludeConnectionString, #endif }; var dbOptions = new DatabaseModelFactoryOptions(reverseEngineerOptions.Tables.Where(t => t.ObjectType.HasColumns()).Select(m => m.Name), schemas); var scaffoldedModel = scaffolder.ScaffoldModel( reverseEngineerOptions.Dacpac ?? reverseEngineerOptions.ConnectionString, dbOptions, modelOptions, codeOptions); var filePaths = scaffolder.Save( scaffoldedModel, Path.GetFullPath(Path.Combine(reverseEngineerOptions.ProjectPath, reverseEngineerOptions.OutputPath ?? string.Empty)), overwriteFiles: true); #if CORE50 #else RemoveOnConfiguring(filePaths.ContextFile, reverseEngineerOptions.IncludeConnectionString); #endif foreach (var file in filePaths.AdditionalFiles) { PostProcess(file); } PostProcess(filePaths.ContextFile); var entityTypeConfigurationPaths = SplitDbContext(filePaths.ContextFile, reverseEngineerOptions.UseDbContextSplitting, contextNamespace); var cleanUpPaths = new SavedModelFiles(filePaths.ContextFile, filePaths.AdditionalFiles); if (procedurePaths != null) { cleanUpPaths.AdditionalFiles.Add(procedurePaths.ContextFile); foreach (var additionalFile in procedurePaths.AdditionalFiles) { cleanUpPaths.AdditionalFiles.Add(additionalFile); } } CleanUp(cleanUpPaths, entityTypeConfigurationPaths); var result = new ReverseEngineerResult { EntityErrors = errors, EntityWarnings = warnings, EntityTypeFilePaths = filePaths.AdditionalFiles, ContextFilePath = filePaths.ContextFile, ContextConfigurationFilePaths = entityTypeConfigurationPaths, }; return result; }
public ReverseEngineerResult GenerateFiles(ReverseEngineerCommandOptions reverseEngineerOptions) { var errors = new List <string>(); var warnings = new List <string>(); var reporter = new OperationReporter( new OperationReportHandler( m => errors.Add(m), m => warnings.Add(m))); var serviceProvider = ServiceProviderBuilder.Build(reverseEngineerOptions); var scaffolder = serviceProvider.GetService <IReverseEngineerScaffolder>(); var schemas = new List <string>(); if (reverseEngineerOptions.DefaultDacpacSchema != null) { schemas.Add(reverseEngineerOptions.DefaultDacpacSchema); } var outputDir = !string.IsNullOrEmpty(reverseEngineerOptions.OutputPath) ? Path.IsPathFullyQualified(reverseEngineerOptions.OutputPath) ? reverseEngineerOptions.OutputPath : Path.GetFullPath(Path.Combine(reverseEngineerOptions.ProjectPath, reverseEngineerOptions.OutputPath)) : reverseEngineerOptions.ProjectPath; var outputContextDir = !string.IsNullOrEmpty(reverseEngineerOptions.OutputContextPath) ? Path.IsPathFullyQualified(reverseEngineerOptions.OutputContextPath) ? reverseEngineerOptions.OutputContextPath : Path.GetFullPath(Path.Combine(reverseEngineerOptions.ProjectPath, reverseEngineerOptions.OutputContextPath)) : outputDir; var modelNamespace = !string.IsNullOrEmpty(reverseEngineerOptions.ModelNamespace) ? reverseEngineerOptions.ProjectRootNamespace + "." + reverseEngineerOptions.ModelNamespace : PathHelper.GetNamespaceFromOutputPath(outputDir, reverseEngineerOptions.ProjectPath, reverseEngineerOptions.ProjectRootNamespace); var contextNamespace = !string.IsNullOrEmpty(reverseEngineerOptions.ContextNamespace) ? reverseEngineerOptions.ProjectRootNamespace + "." + reverseEngineerOptions.ContextNamespace : PathHelper.GetNamespaceFromOutputPath(outputContextDir, reverseEngineerOptions.ProjectPath, reverseEngineerOptions.ProjectRootNamespace); var modelOptions = new ModelReverseEngineerOptions { UseDatabaseNames = reverseEngineerOptions.UseDatabaseNames, }; var codeOptions = new ModelCodeGenerationOptions { UseDataAnnotations = !reverseEngineerOptions.UseFluentApiOnly, Language = "C#", ContextName = reverseEngineerOptions.ContextClassName, ContextDir = outputContextDir, RootNamespace = null, ContextNamespace = contextNamespace, ModelNamespace = modelNamespace, SuppressConnectionStringWarning = false, ConnectionString = reverseEngineerOptions.ConnectionString, }; var dbOptions = new DatabaseModelFactoryOptions(reverseEngineerOptions.Tables.Select(m => m.Name), schemas); var scaffoldedModel = scaffolder.ScaffoldModel( reverseEngineerOptions.Dacpac ?? reverseEngineerOptions.ConnectionString, dbOptions, modelOptions, codeOptions); var filePaths = scaffolder.Save( scaffoldedModel, Path.Combine(reverseEngineerOptions.ProjectPath, reverseEngineerOptions.OutputPath ?? string.Empty), overwriteFiles: true); string fixedNamespace = modelNamespace != contextNamespace ? modelNamespace : null; PostProcessContext(filePaths.ContextFile, reverseEngineerOptions, fixedNamespace); foreach (var file in filePaths.AdditionalFiles) { PostProcess(file); } PostProcess(filePaths.ContextFile); var result = new ReverseEngineerResult { EntityErrors = errors, EntityWarnings = warnings, EntityTypeFilePaths = filePaths.AdditionalFiles, ContextFilePath = filePaths.ContextFile, }; return(result); }
public static ReverseEngineerResult GenerateFiles(ReverseEngineerCommandOptions options) { if (options == null) { throw new ArgumentNullException(nameof(options)); } var errors = new List <string>(); var warnings = new List <string>(); var serviceProvider = ServiceProviderBuilder.Build(options); var schemas = new List <string>(); options.ConnectionString = SqlServerHelper.SetConnectionString(options.DatabaseType, options.ConnectionString); if (options.DefaultDacpacSchema != null) { schemas.Add(options.DefaultDacpacSchema); } if (options.FilterSchemas) { schemas.AddRange(options.Schemas.Select(s => s.Name)); } if (options.UseNoObjectFilter) { options.Tables = new List <SerializationTableModel>(); } #if CORE60 #else foreach (var table in options.Tables) { table.Name = table.Name.Replace("'", "''", StringComparison.OrdinalIgnoreCase); } #endif var outputDir = !string.IsNullOrEmpty(options.OutputPath) ? Path.IsPathFullyQualified(options.OutputPath) ? options.OutputPath : Path.GetFullPath(Path.Combine(options.ProjectPath, options.OutputPath)) : options.ProjectPath; var outputContextDir = !string.IsNullOrEmpty(options.OutputContextPath) ? Path.IsPathFullyQualified(options.OutputContextPath) ? options.OutputContextPath : Path.GetFullPath(Path.Combine(options.ProjectPath, options.OutputContextPath)) : outputDir; var modelNamespace = string.Empty; var contextNamespace = string.Empty; if (string.IsNullOrEmpty(options.ProjectRootNamespace)) { modelNamespace = !string.IsNullOrEmpty(options.ModelNamespace) ? options.ModelNamespace : PathHelper.GetNamespaceFromOutputPath(outputDir, options.ProjectPath, options.ProjectRootNamespace); contextNamespace = !string.IsNullOrEmpty(options.ContextNamespace) ? options.ContextNamespace : PathHelper.GetNamespaceFromOutputPath(outputContextDir, options.ProjectPath, options.ProjectRootNamespace); } else { modelNamespace = !string.IsNullOrEmpty(options.ModelNamespace) ? options.ProjectRootNamespace + "." + options.ModelNamespace : PathHelper.GetNamespaceFromOutputPath(outputDir, options.ProjectPath, options.ProjectRootNamespace); contextNamespace = !string.IsNullOrEmpty(options.ContextNamespace) ? options.ProjectRootNamespace + "." + options.ContextNamespace : PathHelper.GetNamespaceFromOutputPath(outputContextDir, options.ProjectPath, options.ProjectRootNamespace); } var entityTypeConfigurationPaths = new List <string>(); SavedModelFiles procedurePaths = null; SavedModelFiles functionPaths = null; var scaffolder = serviceProvider.GetService <IReverseEngineerScaffolder>(); SavedModelFiles filePaths = scaffolder.GenerateDbContext(options, schemas, outputContextDir, modelNamespace, contextNamespace); if (options.SelectedToBeGenerated != 2) { bool supportsRoutines = options.DatabaseType == DatabaseType.SQLServerDacpac || options.DatabaseType == DatabaseType.SQLServer; procedurePaths = scaffolder.GenerateStoredProcedures(options, ref errors, outputContextDir, modelNamespace, contextNamespace, supportsRoutines); if (procedurePaths != null) { var dbContextLines = File.ReadAllLines(filePaths.ContextFile).ToList(); var index = dbContextLines.IndexOf(" OnModelCreatingPartial(modelBuilder);"); if (index != -1) { dbContextLines.Insert(index, " OnModelCreatingGeneratedProcedures(modelBuilder);"); RetryFileWrite(filePaths.ContextFile, dbContextLines); } } functionPaths = scaffolder.GenerateFunctions(options, ref errors, outputContextDir, modelNamespace, contextNamespace, supportsRoutines); #if CORE50 || CORE60 if (functionPaths != null) { var dbContextLines = File.ReadAllLines(filePaths.ContextFile).ToList(); var index = dbContextLines.IndexOf(" OnModelCreatingPartial(modelBuilder);"); if (index != -1) { dbContextLines.Insert(index, " OnModelCreatingGeneratedFunctions(modelBuilder);"); RetryFileWrite(filePaths.ContextFile, dbContextLines); } } #endif RemoveFragments(filePaths.ContextFile, options.ContextClassName, options.IncludeConnectionString, options.UseNoDefaultConstructor); if (!options.UseHandleBars) { PostProcess(filePaths.ContextFile, options.UseNullableReferences, !options.LegacyLangVersion); } entityTypeConfigurationPaths = SplitDbContext(filePaths.ContextFile, options.UseDbContextSplitting, contextNamespace, options.UseNullableReferences); } else if (options.Tables.Any(t => t.ObjectType == ObjectType.Procedure) || options.Tables.Any(t => t.ObjectType == ObjectType.ScalarFunction)) { warnings.Add("Selected stored procedures/scalar functions will not be generated, as 'Entity Types only' was selected"); } if (!options.UseHandleBars) { foreach (var file in filePaths.AdditionalFiles) { PostProcess(file, options.UseNullableReferences, !options.LegacyLangVersion); } } if (options.RunCleanup) { var cleanUpPaths = CreateCleanupPaths(procedurePaths, functionPaths, filePaths); CleanUp(cleanUpPaths, entityTypeConfigurationPaths, outputDir); } var allfiles = filePaths.AdditionalFiles.ToList(); if (procedurePaths != null) { allfiles.AddRange(procedurePaths.AdditionalFiles); allfiles.Add(procedurePaths.ContextFile); } if (functionPaths != null) { allfiles.AddRange(functionPaths.AdditionalFiles); allfiles.Add(functionPaths.ContextFile); } var result = new ReverseEngineerResult { EntityErrors = errors, EntityWarnings = warnings, EntityTypeFilePaths = allfiles, ContextFilePath = filePaths.ContextFile, ContextConfigurationFilePaths = entityTypeConfigurationPaths, }; return(result); }