public static void ClearDatabase(IDbContextExFactory factory, string configurationType)
 {
     using (var db = GetDb(factory, configurationType)) {
         foreach (var t in DbReflection.GetTables(db))
         {
             db.Database.ExecuteSqlCommand($"TRUNCATE TABLE [{t.TableName}]");
         }
         db.SaveChanges();
     }
 }
        public static void Transfer(IDbContextExFactory factory, string srcConfigurationType, string destConfigurationType)
        {
            Console.WriteLine($"Transfer '{srcConfigurationType}' => '{destConfigurationType}'");
            Console.Write("Is this correct? (y/n): ");
            char c;

            do
            {
                c = char.ToLower((char)Console.Read());
            } while (c != 'y' && c != 'n');
            Console.WriteLine();
            if (c != 'y')
            {
                Console.WriteLine("Cancelled!");
                return;
            }
            Console.WriteLine("Opening Databases...");
            MethodInfo method = typeof(DbContextExTransfer)
                                .GetMethod(nameof(TransferTable), BindingFlags.NonPublic | BindingFlags.Static);

            using (var dbSrc = GetDb(factory, srcConfigurationType))
                using (var dbDest = GetDb(factory, destConfigurationType)) {
                    dbDest.Database.EnsureCreated();
                    var tables = DbReflection.GetTables(dbSrc, dbDest);

                    foreach (var mt in tables)
                    {
                        if (mt.Tables[1].Cast <object>().Any())
                        {
                            throw new ArgumentException($"Can only transfer to an empty database!\n" +
                                                        $"Table \"{mt.TableName} is not empty!");
                        }
                    }

                    foreach (var mt in tables)
                    {
                        Console.WriteLine($"Transfering Table: '{mt.TableName}");
                        MethodInfo generic = mt.MakeGenericMethod(method);
                        generic.Invoke(null, new object[] { mt.Tables[0], mt.Tables[1] });
                    }

                    dbDest.SaveChanges();
                }
            Console.WriteLine();
            Console.WriteLine("Complete!");
        }