public static void RegisterParameters(ISqlTemplateCache sqlTemplateCache, int maxCount) { foreach (var name in RelationalEventEntity.ParameterNames()) { for (int i = 0; i < maxCount; i++) { sqlTemplateCache.AddParameterName(name, i); } } }
private string InitRelationalInsertManySql( string schemaName, string eventTableName, int count) { string insertManySqlHeader = $"INSERT INTO {schemaName}.{eventTableName} (claptrap_type_code, claptrap_id, version, event_type_code, event_data, created_time) VALUES "; var valuesSql = Enumerable.Range(0, count) .Select(x => ValuePartFactory(RelationalEventEntity.ParameterNames(), x)) .ToArray(); var sb = new StringBuilder(insertManySqlHeader); sb.Append(string.Join(",", valuesSql)); return(sb.ToString()); }
private async Task SaveManyCoreMany( IDbFactory dbFactory, IEnumerable <EventEntity> entities) { var array = entities as EventEntity[] ?? entities.ToArray(); var items = array .Select(x => new RelationalEventEntity { claptrap_id = x.ClaptrapId, claptrap_type_code = x.ClaptrapTypeCode, created_time = x.CreatedTime, event_data = x.EventData, event_type_code = x.EventTypeCode, version = x.Version }) .ToArray(); var sql = InitRelationalInsertManySql( _schemaName, _eventTableName, array.Length); using var db = dbFactory.GetConnection(_connectionName); var ps = new DynamicParameters(); for (var i = 0; i < array.Length; i++) { foreach (var(parameterName, valueFunc) in RelationalEventEntity.ValueFactories()) { var eventEntity = items[i]; var name = _sqlTemplateCache.GetParameterName(parameterName, i); ps.Add(name, valueFunc(eventEntity)); } } await db.ExecuteAsync(sql, ps); }