Dapper 批量插入

环境 Mssql

自带的Dapper.Net 批量插入 是一条条循环插入

这里改成了单条 Ps:主要此方法要控制字符串长度哦,每个数据库对单条sql字符长度的限制是不一样的。

        /// <summary>
        ///     批量插入
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="entities"></param>
        /// <param name="exclude">排除的字段</param>
        public int BatchInsert<T>(List<T> entities, string[] exclude = null)
        {
            if (exclude == null || exclude.Length <= 0)
                exclude = new[] {"Tid"};

            for (var i = 0; i < exclude.Length; i++)
            {
                exclude[i] = exclude[i].ToLower();
            }

            if (entities != null && entities.Count > 0)
            {
                var tbname = typeof(T).Name.TrimEnd("Entity".ToCharArray());
                var colms = new List<string>();
                var ps = entities.First().GetType().GetProperties().Where(p => !exclude.Contains(p.Name.ToLower()))
                    .ToList();
                foreach (var p in ps)
                {
                    colms.Add($"[{p.Name}]");
                }

                var paramList = new DynamicParameters();
                var paramsNames = new List<string>();


                var s = 0;
                var n = "a";
                foreach (var item in entities)
                {
                    var toNames = new List<string>();

                    foreach (var p in ps)
                    {
                        var pname = $"@{n}{s}";
                        var pvalue = p.GetValue(item, null);

                        toNames.Add(pname);
                        paramList.Add(pname, pvalue);
                        s++;
                    }

                    paramsNames.Add($"({string.Join(",", toNames)})");
                }

                var sql =
                    $"INSERT INTO TB_{tbname} ({string.Join(",", colms)}) VALUES {string.Join(",", paramsNames)}";
                return Connection.Execute(sql, paramList, _tran);
            }

            throw new Exception("传入参数先");
        }

 

posted @ 2018-05-02 09:28  dldg  阅读(4865)  评论(0编辑  收藏  举报