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); } }