public string WriteCode(OpenApiSchema schema, string name, string @namespace)
        {
            string entityNamespace = Dependencies.Namespace.Entity(Dependencies.Document.Options.RootNamespace);

            Clear();
            GenerateFileHeader();
            WriteLine($"using {entityNamespace};");
            WriteLine("using Microsoft.EntityFrameworkCore;");
            WriteLine("using Microsoft.EntityFrameworkCore.Metadata.Builders;");
            WriteLine();
            WriteLine($"namespace {@namespace}");
            using (OpenBlock())
            {
                string className = Dependencies.Namer.Configuration(name);
                WriteLine($"public partial class {className} : IEntityTypeConfiguration<{name}>");
                using (OpenBlock())
                {
                    WriteLine($"public void Configure(EntityTypeBuilder<{name}> builder)");
                    using (OpenBlock())
                    {
                        var properties = schema.GetAllPropertiesRecursive();
                        foreach (var kvp in properties)
                        {
                            if (!kvp.Value.IsArrayOrObject())
                            {
                                Write($"builder.Property(x => x.{kvp.Key})");
                                WriteLine(";");
                            }
                        }
                    }
                }
            }

            return(GetText());
        }
        public string WriteCode(OpenApiSchema schema, string name, string @namespace)
        {
            Clear();
            GenerateFileHeader();
            WriteLine("using System;");
            WriteLine("using System.Collections.Generic;");
            WriteLine();
            WriteLine($"namespace {@namespace}");
            using (OpenBlock())
            {
                string className = Dependencies.Namer.Entity(name);
                WriteLine($"public partial class {className}");
                using (OpenBlock())
                {
                    WriteLine($"public {className}()");
                    var simpleProperties     = schema.GetSimpleProperties();
                    var navigationProperties = schema.GetNavigationProperties();
                    var allproperties        = schema.GetAllPropertiesRecursive();

                    using (OpenBlock())
                    {
                        foreach (var kvp in navigationProperties)
                        {
                            string n = StringUtilities.MakePascal(kvp.Key);
                            string t = Dependencies.Schema.ConvertToType(kvp.Value);
                            if (!string.IsNullOrEmpty(t) && t.StartsWith("ICollection", StringComparison.CurrentCultureIgnoreCase))
                            {
                                t = t.Replace("ICollection", string.Empty);
                                t = t.TrimStart('<');
                                t = t.TrimEnd('>');
                                WriteLine($"{n} = new HashSet<{t}>();");
                            }
                        }
                    }

                    var primaryKeyTypeName = Dependencies.Document.Options.PrimaryKeyTypeName;

                    WriteLine($"public {primaryKeyTypeName} {className}ID {{ get; set; }}");


                    foreach (var kvp in allproperties)
                    {
                        string n = StringUtilities.MakePascal(kvp.Key);
                        string t = Dependencies.Schema.ConvertToType(kvp.Value);
                        WriteLine();

                        if (n == className)
                        {
                            n = StringUtilities.MakeCamel(n);
                        }

                        WriteLine($"public {t} {n} {{ get; set; }}");
                    }
                }
            }

            return(GetText());
        }
        public static IDictionary <string, OpenApiSchema> GetSimpleProperties(this OpenApiSchema source)
        {
            var dictionary = new Dictionary <string, OpenApiSchema>();

            foreach ((string name, OpenApiSchema schema) in source.GetAllPropertiesRecursive())
            {
                if (!schema.IsArrayOrObject())
                {
                    dictionary[name] = schema;
                }
            }

            return(dictionary);
        }
        public string WriteCode(OpenApiSchema schema, string name, string @namespace)
        {
            var nameList = Dependencies.Document.GetSchemaKeys();

            string entityNamespace = Dependencies.Namespace.Entity(Dependencies.Document.Options.RootNamespace);

            Clear();
            GenerateFileHeader();
            WriteLine("using System;");
            WriteLine("using System.Threading;");
            WriteLine("using System.Threading.Tasks;");
            WriteLine("using System.Collections.Generic;");
            WriteLine($"using {entityNamespace};");
            WriteLine();
            WriteLine($"namespace {@namespace}");
            using (OpenBlock())
            {
                string className  = Dependencies.Namer.ViewModel(name);
                string entityName = Dependencies.Namer.Entity(name);
                WriteLine($"public partial class {className}");
                using (OpenBlock())
                {
                    var primaryKeyTypeName = Dependencies.Document.Options.PrimaryKeyTypeName;
                    var properties         = schema.GetAllPropertiesRecursive();

                    WriteLine($"public {primaryKeyTypeName} {entityName}ID {{ get; set; }}");

                    foreach (var kvp in properties)
                    {
                        string n = StringUtilities.MakePascal(kvp.Key);
                        string t = Dependencies.Schema.ConvertToType(kvp.Value);
                        if (t.StartsWith("ICollection<", StringComparison.CurrentCultureIgnoreCase))
                        {
                            string originalItemType = null;
                            string newItemType      = null;
                            string temp             = t;
                            originalItemType = temp.Substring(12).TrimEnd('>');
                            var keys = Dependencies.Document.GetSchemaKeys();
                            if (keys.Contains(originalItemType))
                            {
                                newItemType = Dependencies.Namer.ViewModel(originalItemType);
                                t           = t.Replace(originalItemType, newItemType);
                            }
                        }

                        if (nameList.Contains(t))
                        {
                            t = Dependencies.Namer.ViewModel(t);
                        }

                        if (n == className)
                        {
                            n = char.ToLower(n[0]) + n.Substring(1);
                        }

                        WriteLine();
                        WriteLine($"public {t} {n} {{ get; set; }}");
                    }
                }
            }

            return(GetText());
        }