public static void example_log_modelFactory <T>()
        {
            POSContext context = new POSContextFactory().CreateDbContext(new string[] { });
            ModelForm  model   = ModelFormFactory.BuildModelForm(context, typeof(T));

            Log(JsonConvert.SerializeObject(model, Formatting.Indented));
        }
        public static void example_render_model()
        {
            POSContext            context   = new POSContextFactory().CreateDbContext(new string[] { });
            ModelForm             model     = ModelFormFactory.BuildModelForm(context, typeof(Order));
            AbstractBaseGenerator generator = new ScribanGeneratorConcrete();

            generator.Build("form-entity.scriban", "form-order.vue", model).Wait();
            Log("complete");
        }
        public static void example_log_properties()
        {
            string     separator   = "===========================================";
            POSContext context     = new POSContextFactory().CreateDbContext(new string[] { });
            var        metadata    = context.Entry(new Product()).Metadata;
            var        props       = metadata.GetProperties();
            var        navigations = metadata.GetNavigations();

            foreach (var nav in navigations)
            {
                Log("\n\n");

                Log("naviagtions.....");

                Log($"nav.Name : {nav.Name}");
                Log($"nav.GetFieldName(): {nav.GetFieldName()}");
                Log($"nav.IsCollection(): {nav.IsCollection()}");
                Log($"nav.IsDependentToPrincipal(): {nav.IsDependentToPrincipal()}");
                Log($"nav.ClrType.Name: {nav.ClrType.Name}");
                Log($"nav.DeclaringType.Name: {nav.DeclaringType.Name}");
                Log($"nav.DeclaringEntityType.Name: {nav.DeclaringEntityType.Name}");

                Log("\n\n");
            }

            foreach (var item in props)
            {
                if (item.Name == "CategoryId")
                {
                    Log("*********************************");
                    var foreignKey = item.GetContainingForeignKeys().First();



                    Log($"PrincipalToDependent {foreignKey.PrincipalToDependent.Name}");
                    Log($"DependentToPrincipal {foreignKey.DependentToPrincipal.Name}");    //category
                    Log($"DeclaringEntityType {foreignKey.DeclaringEntityType.Name}");      //product
                    Log($"PrincipalKey Name  {foreignKey.PrincipalKey.Relational().Name}"); //category
                    if (item.IsForeignKey() && foreignKey.DependentToPrincipal.IsCollection() == false)
                    {
                        Log("*********************************");

                        Log($"foreignKey Relational {foreignKey.Relational().Name}");
                        var declaringType = foreignKey.PrincipalKey.DeclaringEntityType;
                        var meta          = declaringType.Relational();
                        Log($"declaringType.ClrType.Name {declaringType.ClrType.Name}");
                        Log($"\tdeclaringType..Name {declaringType.Name}");
                        Log($"\tdeclaringType.Model.ToString() {declaringType.Model.ToString()}");
                        Log($"\tdeclaringType.Relational().TableName {meta.TableName}");
                        Log($"\tdeclaringType.Relational().Schema {meta.Schema}");
                        Log($"\tdeclaringType.Relational().DiscriminatorValue {meta.DiscriminatorValue}");
                    }

                    Log(separator);

                    Log("*********************************");
                }
                Console.WriteLine($"Name:{item.Name}, type : {item.ClrType}");
            }

            Console.WriteLine("=============================");
            var ikeys = metadata.GetForeignKeys();

            foreach (var item in ikeys)
            {
                Console.WriteLine($"ToString:{item.PrincipalKey.ToString()}");
            }
        }