public string ToSQL() { if (this.models.Count == 0) { throw new ArgumentOutOfRangeException("No items."); } Parameters.Clear(); string tableName = MyStagingUtils.GetMapping(typeof(T), ProviderType.MySql); StringBuilder sqlBuilder = new StringBuilder(); sqlBuilder.Append($"INSERT INTO {tableName}"); string fieldsName = string.Empty; var properties = MyStagingUtils.GetDbFields(typeof(T)); foreach (var p in properties) { fieldsName += $"`{p.Name}`,"; } fieldsName = fieldsName.Remove(fieldsName.Length - 1, 1); sqlBuilder.Append($"({fieldsName}) VALUES "); for (int i = 0; i < models.Count; i++) { string valueString = string.Empty; foreach (var pi in properties) { var paramName = $"@{pi.Name}_{i}"; var value = pi.GetValue(models[i]); var pk = pi.GetCustomAttribute <PrimaryKeyAttribute>(); var hasPK = pk != null; if (hasPK && pk.AutoIncrement) { valueString += "default,"; } else { valueString += paramName + ","; if (hasPK || defaultValueField.ContainsKey(pi.Name.ToLower())) { if (value == null || value.Equals(Guid.Empty) || zeroTime.Equals(value)) { value = GetDefaultValue(pi); } } Parameters.Add(new MySqlParameter(paramName, value)); } } valueString = valueString.Remove(valueString.Length - 1, 1); sqlBuilder.Append($"({valueString}),"); } sqlBuilder.Remove(sqlBuilder.Length - 1, 1); sqlBuilder.Append(";"); CommandText = sqlBuilder.ToString(); return(CommandText); }
/// <summary> /// 重写方法 /// </summary> /// <returns></returns> public override string ToSQL() { string tableName = MyStagingUtils.GetMapping(typeof(T), ProviderType.PostgreSQL); this.CommandText = $"UPDATE {tableName} a SET {string.Join(",", this.setList)} {"WHERE " + string.Join("\nAND ", WhereConditions)}"; return(this.CommandText); }
/// <summary> /// 重写方法 /// </summary> /// <returns></returns> public override string ToSQL() { string tableName = MyStagingUtils.GetMapping(typeof(T), ProviderType.MySql); this.CommandText = $"DELETE FROM {tableName} {"WHERE " + string.Join("\nAND ", WhereConditions)};"; return(this.CommandText); }
public void GetMapping() { var mysqlName = "`mystaging`.`user`"; var mysql = MyStagingUtils.GetMapping(typeof(UserModel), Metadata.ProviderType.MySql); Assert.Equal(mysqlName, mysql); var pgsqlName = "\"mystaging\".\"user\""; var pgsql = MyStagingUtils.GetMapping(typeof(UserModel), Metadata.ProviderType.PostgreSQL); Assert.Equal(pgsqlName, pgsql); }