Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
        public virtual string SqlConvert(IClassMapper classMapper, string sql)
        {
            SqlConvertResult result = SqlConvert(classMapper, sql, null);

            return(result == null ? string.Empty : result.Sql);
        }