public virtual SqlConvertResult Delete(IClassMapper classMapper, string condition, DynamicParameters dynamicParameters) { if (dynamicParameters == null) { throw new ArgumentNullException("dynamicParameters"); } SqlConvertResult result = SqlConvert(classMapper, condition, dynamicParameters); StringBuilder sql = new StringBuilder(string.Format("DELETE FROM {0}", GetTableName(classMapper))); sql.Append(" WHERE ").Append(result.Sql); result.Sql = sql.ToString(); return(result); }
public virtual SqlConvertResult Count(IClassMapper classMapper, string condition, DynamicParameters dynamicParameters) { SqlConvertResult result = SqlConvert(classMapper, condition, dynamicParameters); StringBuilder sql = new StringBuilder(string.Format("SELECT COUNT(*) AS {0}Total{1} FROM {2}", DbProvider.OpenQuote, DbProvider.CloseQuote, GetTableName(classMapper))); if (!string.IsNullOrWhiteSpace(condition)) { sql.Append(" WHERE ").Append(result.Sql); } result.Sql = sql.ToString(); return(result); }
public virtual SqlConvertResult Update(IClassMapper classMapper, string condition, DynamicParameters dynamicParameters, object entity = null) { if (dynamicParameters == null) { throw new ArgumentNullException("dynamicParameters"); } var columnMaps = classMapper.GetColumnMaps(); if (!columnMaps.Any()) { throw new ArgumentException("没有被映射的列。"); } if (entity != null) { IPropertyMap propertyChangedListMap = classMapper.GetPropertyChangedListMap(); if (propertyChangedListMap != null) { IList <string> propertyChangedList = propertyChangedListMap.PropertyInfo.GetValue(entity, null) as IList <string>; if (propertyChangedList != null && propertyChangedList.Count > 0) { propertyChangedList = propertyChangedList.Distinct().ToList(); IList <IPropertyMap> propertyMaps = new List <IPropertyMap>(); foreach (string name in propertyChangedList) { if (string.IsNullOrWhiteSpace(name)) { continue; } IPropertyMap propertyMap = columnMaps.FirstOrDefault(m => m != null && string.Compare(m.Name, name.Trim(), StringComparison.OrdinalIgnoreCase) == 0); if (propertyMap != null) { propertyMaps.Add(propertyMap); } } columnMaps = propertyMaps; } } } SqlConvertResult result = SqlConvert(classMapper, condition, dynamicParameters); var setSql = columnMaps.Select(p => string.Format("{0} = {1}{2}", GetColumnName(classMapper, p, false), DbProvider.ParameterPrefix, p.Name)); string updateSql = string.Format("UPDATE {0} SET {1} WHERE {2}", GetTableName(classMapper), setSql.AppendStrings(), result.Sql); result.Sql = updateSql; return(result); }
public virtual SqlConvertResult Insert(IClassMapper classMapper, DynamicParameters dynamicParameters) { SqlConvertResult result = SqlConvert(classMapper, null, dynamicParameters); var columnMaps = classMapper.GetColumnMaps(); if (!columnMaps.Any()) { throw new ArgumentException("没有被映射的列。"); } var columnNames = columnMaps.Select(p => GetColumnName(classMapper, p, false)); var parameterNames = columnMaps.Select(p => DbProvider.ParameterPrefix + p.Name); string sql = string.Format("INSERT INTO {0} ({1}) VALUES ({2})", GetTableName(classMapper), columnNames.AppendStrings(), parameterNames.AppendStrings()); result.Sql = sql; return(result); }
public bool Insert <T>(T entity, string tableName = null, int?commandTimeout = null) where T : class { bool flag; IClassMapper <T> classMapper = ClassMapperFactory.GetMapper <T>(tableName); classMapper.BeforeSave(entity); var identityColumn = classMapper.Properties.SingleOrDefault(p => p.KeyType == KeyType.Identity); IDictionary <string, object> keyValues = new ExpandoObject(); SqlConvertResult sqlConvertResult = SqlGenerator.Insert(classMapper, null); if (identityColumn != null) { IEnumerable <long> result; if (SqlGenerator.SupportsMultipleStatements()) { sqlConvertResult.Sql += SqlGenerator.DbProvider.BatchSeperator + SqlGenerator.IdentitySql(classMapper); result = DbConnection.Query <long>(sqlConvertResult.Sql, entity, DbTransaction, false, commandTimeout, CommandType.Text); } else { DbConnection.Execute(sqlConvertResult.Sql, entity, DbTransaction, commandTimeout, CommandType.Text); sqlConvertResult.Sql = SqlGenerator.IdentitySql(classMapper); result = DbConnection.Query <long>(sqlConvertResult.Sql, entity, DbTransaction, false, commandTimeout, CommandType.Text); } long identityValue = result.First(); int identityInt = Convert.ToInt32(identityValue); keyValues.Add(identityColumn.Name, identityInt); identityColumn.PropertyInfo.SetValue(entity, identityInt, null); flag = identityInt > 0; } else { flag = DbConnection.Execute(sqlConvertResult.Sql, entity, DbTransaction, commandTimeout, CommandType.Text) > 0; } if (flag) { classMapper.AfterSave(entity); } return(flag); }
public virtual SqlConvertResult Select(IClassMapper classMapper, string condition, string orderBy, DynamicParameters dynamicParameters, bool hasNoLock = true) { SqlConvertResult result = SqlConvert(classMapper, condition, dynamicParameters); StringBuilder sql = new StringBuilder(); sql.Append("SELECT ").Append(BuildSelectColumns(classMapper)).Append(" FROM ").Append(GetTableName(classMapper)); if (hasNoLock) { sql.Append(DbProvider.NoLock); } if (!string.IsNullOrWhiteSpace(condition)) { sql.Append(" WHERE ").Append(result.Sql); } if (!string.IsNullOrWhiteSpace(orderBy)) { sql.Append(" ORDER BY ").Append(orderBy); } result.Sql = sql.ToString(); return(result); }
public bool Insert <T>(IEnumerable <T> entities, string tableName = null, int?commandTimeout = null) where T : class { IClassMapper <T> classMapper = ClassMapperFactory.GetMapper <T>(tableName); if (entities != null) { foreach (T entity in entities) { classMapper.BeforeSave(entity); } } SqlConvertResult sqlConvertResult = SqlGenerator.Insert(classMapper, null); bool flag = DbConnection.Execute(sqlConvertResult.Sql, entities, DbTransaction, commandTimeout, CommandType.Text) > 0; if (flag && entities != null) { foreach (T entity in entities) { classMapper.AfterSave(entity); } } return(flag); }
public virtual SqlConvertResult SqlConvert(IClassMapper classMapper, string sql, DynamicParameters dynamicParameters) { SqlConvertResult result = new SqlConvertResult(); if (!string.IsNullOrWhiteSpace(sql) && sql.Contains("#")) { foreach (IPropertyMap property in classMapper.Properties) { if (property == null) { continue; } sql = sql.Replace("#" + property.Name, string.Concat(DbProvider.OpenQuote, property.ColumnName, DbProvider.CloseQuote)); } } result.Sql = sql; if (dynamicParameters == null) { return(result); } result.Parameters = dynamicParameters; return(result); }
public virtual SqlConvertResult Update(string tableName, IList <string> updateFields, string condition, DynamicParameters dynamicParameters) { if (dynamicParameters == null) { throw new ArgumentNullException("dynamicParameters"); } if (updateFields == null) { throw new ArgumentNullException("updateFields"); } var setSql = updateFields.Select(p => string.Format("{0} = {1}{2}", p, DbProvider.ParameterPrefix, p)); string updateSql = string.Format("UPDATE {0} SET {1} WHERE {2}", tableName, setSql.AppendStrings(), condition); SqlConvertResult result = new SqlConvertResult { Sql = updateSql, Parameters = dynamicParameters }; return(result); }
public bool Update(string tableName, IList <string> updateFields, string condition, DynamicParameters dynamicParameters, int?commandTimeout = null) { SqlConvertResult sqlConvertResult = SqlGenerator.Update(tableName, updateFields, condition, dynamicParameters); return(DbConnection.Execute(sqlConvertResult.Sql, sqlConvertResult.Parameters, DbTransaction, commandTimeout, CommandType.Text) > 0); }
public virtual string SqlConvert(IClassMapper classMapper, string sql) { SqlConvertResult result = SqlConvert(classMapper, sql, null); return(result == null ? string.Empty : result.Sql); }