public static async Task WriteCsEntityClassesFileAsync(TSqlModel model, GeneratorSettings generatorSettings, Action <double> progressHandler = null)
        {
            var    fileName = generatorSettings.OutputPath_CsEntityClasses;
            var    tables   = model.GetAllTables().ToDictionary(currTable => currTable.Name.Parts[1].ToLower());
            double progress = 0.0;

            var fileStream = File.Open(fileName, FileMode.Create, FileAccess.Write);
            var bufferSize = 5 * 1024 * 1024; // 5 MB

            using (StreamWriter writer = new StreamWriter(fileStream, Encoding.UTF8, bufferSize))
            {
                // Flush stream after every table loop, manually
                writer.AutoFlush = false;

                // Loop only on selected tables, or on every table in model if GenerateForAllTables == true
                IEnumerable <string> tableNames;
                if (generatorSettings.RunGeneratorForAllTables)
                {
                    tableNames = tables.Keys;
                }
                else
                {
                    tableNames = (IEnumerable <string>)generatorSettings.RunGeneratorForSelectedTables ?? new string[0];
                }

                var tablesCount = tableNames.Count();

                foreach (var currTableName in tableNames)
                {
                    string cs        = "";
                    var    currTable = tables.ContainsKey(currTableName.ToLower()) ? tables[currTableName.ToLower()] : null;

                    if (currTable != null)
                    {
                        cs = new CsEntityClassGenerator(generatorSettings, currTable).Generate();
                        if (cs != string.Empty)
                        {
                            writer.WriteLine(cs);
                        }

                        await writer.FlushAsync();

                        progress += 100.0 / tablesCount;
                        progressHandler?.Invoke((int)progress);
                    }
                }
            }

            return;
        }
Example #2
0
 private void ButtonGenerateNetEntityClass_Click(object sender, RoutedEventArgs e)
 {
     if (lstSelectedTables.SelectedItems.Count > 0)
     {
         string output = string.Empty;
         foreach (var item in lstSelectedTables.SelectedItems)
         {
             if (item is TSqlObject table)
             {
                 CsEntityClassGenerator gen = new CsEntityClassGenerator(GeneratorSettings, table, true);
                 output += gen.Generate();
             }
         }
         txtOutput.Text = output;
     }
 }