Ejemplo n.º 1
0
        public override int Update <TModel>(List <TModel> objs)
        {
            if (!objs.Any())
            {
                return(0);
            }
            var table      = TypeCache.GetTable(typeof(TModel));
            var primaryKey = table.PrimaryKey;
            int index      = 0;
            var db         = GetDBHelper();
            var sb         = new StringBuilder();

            foreach (var obj in objs)
            {
                var c = GetUpdateField(obj);
                if (c.Count == 0)
                {
                    continue;
                }
                var c2 = new ParameCollection();
                foreach (var kv in c)
                {
                    var a   = table.FieldsDic.TryGetValue(kv.Key, out var field);
                    var key = kv.Key;
                    var val = kv.Value;
                    if (a)
                    {
                        key = field.MapingName;
                    }
                    c2.Add(key, val);
                }
                index += 1;
                var keyValue = primaryKey.GetValue(obj);
                var keyParme = _DBAdapter.GetParamName(primaryKey.MapingName, index);
                var where = $" where {_DBAdapter.KeyWordFormat(primaryKey.MapingName)}={keyParme}";
                db.AddParam(keyParme, keyValue);
                var    setString = string.Join(",", c2.Select(b => string.Format("{0}='{1}'", _DBAdapter.KeyWordFormat(b.Key), b.Value)));
                string sql       = _DBAdapter.GetUpdateSql(table.TableName, setString, where);
                sb.AppendLine(sql + ";");

                if (sb.Length > MaxSqlLength)
                {
                    db.Execute(sb.ToString());
                    sb.Clear();
                }
            }
            if (sb.Length > 1)
            {
                db.Execute(sb.ToString());
            }
            return(objs.Count);
        }