/// <summary> /// Generates a Kusto table for a specific <see cref="Type"/>, by mapping it's properties to columns. /// </summary> /// <param name="client">The <see cref="ICslAdminProvider"/> that we are extending.</param> /// <param name="type">The <see cref="Type"/> that we are generating a table for.</param> /// <returns>The name of the table created.</returns> public static async Task <string> GenerateTableFromType(this ICslAdminProvider client, Type type) { var tableName = type.Name; var tables = new List <string>(); var command = CslCommandGenerator.GenerateTablesShowCommand(); var reader = await client.ExecuteControlCommandAsync(client.DefaultDatabaseName, command); while (reader.Read()) { tables.Add(reader.GetString(0)); } if (tables.Contains(tableName)) { return(tableName); } var columns = type.GetProperties().Select(property => Tuple.Create(property.Name, property.PropertyType.FullName)).ToList(); command = CslCommandGenerator.GenerateTableCreateCommand(tableName, columns); await client.ExecuteControlCommandAsync(client.DefaultDatabaseName, command); return(tableName); }