コード例 #1
0
ファイル: DbQueryable`.cs プロジェクト: inmen/SqlBatis
        /// <summary>
        /// 实体属性转换成字典
        /// </summary>
        /// <param name="entity"></param>
        private void EntityToDictionary <Entity>(Entity entity)
        {
            var serializer = DbContextBehavior.GetEntityToDictionaryHandler(typeof(Entity));
            var values     = serializer(entity);

            foreach (var item in values)
            {
                if (_parameters.ContainsKey(item.Key))
                {
                    _parameters[item.Key] = item.Value;
                }
                else
                {
                    _parameters.Add(item.Key, item.Value);
                }
            }
        }
コード例 #2
0
ファイル: DbQueryable`.cs プロジェクト: inmen/SqlBatis
        private void EntitiesToDictionary <Entity>(IEnumerable <Entity> entities)
        {
            var serializer = DbContextBehavior.GetEntityToDictionaryHandler(typeof(Entity));

            foreach (var entity in entities)
            {
                var values = serializer(entity);
                foreach (var iitem in values)
                {
                    if (_parameters.ContainsKey(iitem.Key))
                    {
                        (_parameters[iitem.Key] as List <object>).Add(iitem.Value);
                    }
                    else
                    {
                        var list = new List <object>
                        {
                            iitem.Value
                        };
                        _parameters.Add(iitem.Key, list);
                    }
                }
            }
        }
コード例 #3
0
ファイル: DbQueryable`.cs プロジェクト: inmen/SqlBatis
        /// <summary>
        /// 构建批量新增命令
        /// </summary>
        /// <param name="entitys"></param>
        /// <returns></returns>
        private string BuildBatchInsertCommand(IEnumerable <T> entitys)
        {
            var table      = GetViewName();
            var filters    = BuildIgnoreExpression();
            var intcolumns = _columns
                             .Where(a => !a.IsComplexType)
                             .Where(a => !filters.Contains(a.ColumnName))
                             .Where(a => !a.IsNotMapped)
                             .Where(a => !a.IsIdentity)
                             .ToList();
            var columnNames = string.Join(",", intcolumns.Select(s => s.ColumnName));

            if (_context.DbContextType == DbContextType.Mysql)
            {
                var buffer = new StringBuilder();
                buffer.Append($"INSERT INTO {table}({columnNames}) VALUES ");
                var serializer = DbContextBehavior.GetEntityToDictionaryHandler(typeof(T));
                var list       = entitys.ToList();
                for (var i = 0; i < list.Count; i++)
                {
                    var item   = list[i];
                    var values = serializer(item);
                    buffer.Append('(');
                    for (var j = 0; j < intcolumns.Count; j++)
                    {
                        var column = intcolumns[j];
                        var value  = values[column.CsharpName];
                        if (value == null)
                        {
                            buffer.Append(column.IsDefault ? "DEFAULT" : "NULL");
                        }
                        else if (column.CsharpType == typeof(bool) || column.CsharpType == typeof(bool?))
                        {
                            buffer.Append(Convert.ToBoolean(value) == true ? 1 : 0);
                        }
                        else if (column.CsharpType == typeof(Guid) || column.CsharpType == typeof(Guid?))
                        {
                            buffer.Append($"'{value}'");
                        }
                        else if (column.CsharpType == typeof(byte[]))
                        {
                            var bytes  = value as byte[];
                            var hexstr = string.Join("", bytes.Select(s => Convert.ToString(s, 16).PadLeft(2, '0')));
                            buffer.Append($"0x{hexstr}");
                        }
                        else if (column.CsharpType == typeof(DateTime) || column.CsharpType == typeof(DateTime?))
                        {
                            buffer.Append($"'{value}'");
                        }
                        else if (column.CsharpType.IsValueType || (Nullable.GetUnderlyingType(column.CsharpType)?.IsValueType == true))
                        {
                            buffer.Append(value);
                        }
                        else
                        {
                            var str = CheckSql(value.ToString());
                            buffer.Append($"'{str}'");
                        }
                        if (j + 1 < intcolumns.Count)
                        {
                            buffer.Append(',');
                        }
                    }
                    buffer.Append(')');
                    if (i + 1 < list.Count)
                    {
                        buffer.Append(',');
                    }
                }
                return(buffer.Remove(buffer.Length - 1, 0).ToString());
            }
            throw new NotImplementedException();
        }