예제 #1
0
 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);
         }
     }
 }
예제 #2
0
        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());
        }
예제 #3
0
        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);
        }