private static void InsertTimings(ProfilerDbDataContext profilerDataContext, Guid transactionId, Timing timing)
        {
            var timingId = Guid.Empty;
            Guid.TryParse(timing.Id, out timingId);
            profilerDataContext.InsertProfilerTiming(timingId, transactionId, timing.IsRoot, timing.Name, timing.KeyValues,
                    timing.Duration, timing.DurationWithOutChildren, timing.Start, Guid.Parse(timing.ParentId), timing.Order,
                    timing.SqlTimingDuration, timing.ExecutedScalers, timing.ExecutedNonQueries, timing.ExecutedReaders, timing.ManagedThreadId);

            foreach (var sqlTiming in timing.SqlTimings)
            {
                var sqlTimingId = Guid.Empty;
                Guid.TryParse(sqlTiming.Id, out sqlTimingId);
                profilerDataContext.InsertProfilerSqlTiming(sqlTiming.ExecuteType, sqlTiming.CommandString, sqlTiming.StartMilliseconds,
                    sqlTiming.DurationMilliseconds, sqlTiming.FirstFetchDurationMilliseconds, timingId, transactionId, sqlTiming.Order, sqlTimingId);
                foreach (var sqlParameter in sqlTiming.Parameters)
                {
                    profilerDataContext.InsertProfilerSqlParameter(sqlTimingId, sqlParameter.Name, sqlParameter.Value,
                        sqlParameter.DbType, sqlParameter.Size);
                }
            }

            if (timing.Children.Count > 0)
            {
                foreach (var childTiming in timing.Children)
                {
                    InsertTimings(profilerDataContext, transactionId, childTiming);
                }
            }
        }