/// <inheritdoc /> public async Task <int> CreateTableAsync(Type mappedType) { var table = Schema.Table(mappedType); var columns = Schema.Columns(mappedType).Where(c => !c.IsKeyColumn); var primaryKeyCols = Schema.Columns(mappedType).Where(c => c.IsKeyColumn); var columnDefs = new List <string>(64); foreach (var c in primaryKeyCols) { var sqlType = DbTypes.Map(c.NativeType).ToString().ToUpperInvariant(); if (c.NativeType == typeof(string)) { sqlType = $"{sqlType} ({c.StringLength})"; } columnDefs.Add($"{c.QualifiedName} {sqlType} {(c.IsKeyGenerated ? "IDENTITY(1,1)" : "NOT NULL")}"); } foreach (var c in columns) { var sqlType = DbTypes.Map(c.NativeType).ToString().ToUpperInvariant(); if (c.NativeType == typeof(string)) { sqlType = $"{sqlType} ({c.StringLength})"; } columnDefs.Add($"{c.QualifiedName} {sqlType} {(c.IsNullable ? "NULL" : "NOT NULL")}"); } var createTable = $"CREATE TABLE {table.QualifiedName} ({string.Join(", ", columnDefs)}, " + $"CONSTRAINT PK_{table.Name.Replace(" ", "_")} " + $"PRIMARY KEY ({string.Join(", ", primaryKeyCols.Select(c => c.QualifiedName))}))"; var command = Connection.CreateCommand(); command.CommandTimeout = _parent.SqlCommandTimeoutSeconds; command.CommandText = createTable; return(await command.ExecuteNonQueryAsync().ConfigureAwait(false)); }