Esempio n. 1
0
        public void Run()
        {
            var _distinctdata = _alldata.SelectMany(e => e.BaseObject.Select(w => w.Key)).Distinct().ToList();

            var AllValidfields = _tableInfo.ColumnInfos.Select(e => e.ColumnName).Intersect(_distinctdata);

            var ValidKeys = _tableInfo.ColumnInfos.Where(q => q.IsKey).Select(e => e.ColumnName).Intersect(_distinctdata).ToList();

            if (ValidKeys.Count != _tableInfo.ColumnInfos.Where(e => e.IsKey).Select(e => e.ColumnName).Distinct().Count())
            {
                Console.WriteLine($"Key missed -Type {_tableName} ");
                throw new Exception();
            }

            querybulder = new UpdateQueryBuilder(_tableName);

            List <SqlParameter> _paramsSql = new List <SqlParameter>();

            int _index = 0;

            foreach (var item in _alldata)
            {
                List <string> stringParamForQuery = new List <string>();

                List <string> stringKeyParam = new List <string>();

                var data = item.ChangedProperties.Intersect(AllValidfields);

                if (data.Count() > 0)
                {
                    foreach (var obj in data)
                    {
                        string param = $"@p{_index++}";

                        stringParamForQuery.Add(param);

                        var dbpar = new SqlParameter(param, shcema[_tableName][obj]);

                        if (item.BaseObject.ContainsKey(obj))
                        {
                            dbpar.Value = QueryBuilderHelper.FormatSQLForDb(_tableName, obj, item.BaseObject[obj]);
                        }
                        else
                        {
                            dbpar.Value = DBNull.Value;
                        }

                        _paramsSql.Add(dbpar);
                    }

                    foreach (var singleKey in ValidKeys)
                    {
                        string param = $"@p{_index++}";
                        var    dbpar = new SqlParameter(param, shcema[_tableName][singleKey]);

                        stringKeyParam.Add(param);
                        dbpar.Value = QueryBuilderHelper.FormatSQLForDb(_tableName, singleKey, item.BaseObject[singleKey]);
                        _paramsSql.Add(dbpar);
                    }

                    querybulder.AppendCommand(data.ToList(), stringParamForQuery, ValidKeys, stringKeyParam);

                    if (_paramsSql.Count > UpdateCommandParametersCount)
                    {
                        Execute(_paramsSql);
                        _paramsSql = new List <SqlParameter>();
                        _index     = 0;
                        querybulder.Reset();
                        stringParamForQuery = new List <string>();
                        stringKeyParam      = new List <string>();
                    }
                }
            }

            if (_paramsSql.Count > 0)
            {
                Execute(_paramsSql);
                _paramsSql = new List <SqlParameter>();
                _index     = 0;
            }
        }