public IEnumerable <IDictionary <string, object> > UpsertMany(string tableName, IList <IDictionary <string, object> > list, bool isResultRequired, Func <IDictionary <string, object>, Exception, bool> errorCallback)
        {
            foreach (var row in list)
            {
                IDictionary <string, object> result;
                try
                {
                    var key = _adapter.GetKey(tableName, row);
                    if (key.Count == 0)
                    {
                        result = new AdoAdapterInserter(_adapter).Insert(tableName, row, isResultRequired);
                    }
                    else
                    {
                        var criteria = ExpressionHelper.CriteriaDictionaryToExpression(tableName,
                                                                                       key);
                        result = Upsert(tableName, row, criteria, isResultRequired);
                    }
                }
                catch (Exception ex)
                {
                    if (errorCallback(row, ex))
                    {
                        continue;
                    }
                    throw;
                }

                yield return(result);
            }
        }