public static Task <GeneratePocoResponse> Generate(GeneratePocoRequest request) { return(Task.Run(() => { using (var schemaReader = SchemaReaderProvider.GetReader(request.ServerType)) { var connectionString = request.ConnectionString; if (schemaReader == null || string.IsNullOrEmpty(connectionString)) { return new GeneratePocoResponse(); } var tables = schemaReader.ReadSchema(connectionString); if (tables == null || tables.Count <= 0) { throw new Exception(string.Format("Empty database or invalid connection string: {0}", connectionString)); } var fileNames = new List <string>(); foreach (var table in tables) { var model = new ModelTemplate(); model.Namespace = request.Namespace; model.IncludeRelationships = request.IncludeRelationship; model.Table = table; model.Tables = tables; // get page content string pageContent = model.TransformText(); if (!Directory.Exists(request.FolderLocation)) { Directory.CreateDirectory(request.FolderLocation); } // Write model to file string fileName = table.ClassName + ".cs"; File.WriteAllText(Path.Combine(request.FolderLocation, fileName), pageContent); fileNames.Add(fileName); } var response = new GeneratePocoResponse(); response.Filenames = fileNames; return response; } })); }
private async void Generate() { try { // Reset content FileItems = new ObservableCollection <string>(); SelectedFile = string.Empty; ShowBuildrogress = true; var request = new GeneratePocoRequest(); DbServerType serverType = (DbServerType)Enum.Parse(typeof(DbServerType), SelectedDatabaseTypeItem); request.ServerType = serverType; request.Namespace = Namespace; request.FolderLocation = ModelsFolderLocation; request.IncludeRelationship = IncludeRelationship; request.ConnectionString = GetConnectionString(serverType); if (string.IsNullOrEmpty(request.ConnectionString)) { throw new Exception("Invalid database info provided!"); } var pocoResponse = await GeneratePocoModels.Generate(request); if (pocoResponse != null && pocoResponse.Filenames != null) { var fileNames = pocoResponse.Filenames; FileItems = new ObservableCollection <string>(fileNames); SelectedFile = string.Empty; if (fileNames.Count > 0) { SelectedFile = fileNames[0]; FileSelectionChanged(); } } } finally { ShowBuildrogress = false; } }