コード例 #1
0
        public RelationalCommandBuilder(
            [NotNull] ISensitiveDataLogger logger,
            [NotNull] DiagnosticSource diagnosticSource,
            [NotNull] IRelationalTypeMapper typeMapper)
        {
            Check.NotNull(logger, nameof(logger));
            Check.NotNull(diagnosticSource, nameof(diagnosticSource));
            Check.NotNull(typeMapper, nameof(typeMapper));

            _logger = logger;
            _diagnosticSource = diagnosticSource;
            _typeMapper = typeMapper;
        }
コード例 #2
0
        /// <summary>
        ///     This API supports the Entity Framework Core infrastructure and is not intended to be used
        ///     directly from your code. This API may change or be removed in future releases.
        /// </summary>
        public QueryCompiler(
            [NotNull] IQueryContextFactory queryContextFactory,
            [NotNull] ICompiledQueryCache compiledQueryCache,
            [NotNull] ICompiledQueryCacheKeyGenerator compiledQueryCacheKeyGenerator,
            [NotNull] IDatabase database,
            [NotNull] ISensitiveDataLogger <QueryCompiler> logger,
            [NotNull] MethodInfoBasedNodeTypeRegistry methodInfoBasedNodeTypeRegistry,
            [NotNull] ICurrentDbContext currentContext)
        {
            Check.NotNull(queryContextFactory, nameof(queryContextFactory));
            Check.NotNull(compiledQueryCache, nameof(compiledQueryCache));
            Check.NotNull(compiledQueryCacheKeyGenerator, nameof(compiledQueryCacheKeyGenerator));
            Check.NotNull(database, nameof(database));
            Check.NotNull(logger, nameof(logger));
            Check.NotNull(currentContext, nameof(currentContext));

            _queryContextFactory            = queryContextFactory;
            _compiledQueryCache             = compiledQueryCache;
            _compiledQueryCacheKeyGenerator = compiledQueryCacheKeyGenerator;
            _database = database;
            _logger   = logger;
            _methodInfoBasedNodeTypeRegistry = methodInfoBasedNodeTypeRegistry;
            _contextType = currentContext.Context.GetType();
        }
コード例 #3
0
 protected override IRelationalCommand BuildCore(
     ISensitiveDataLogger sensitiveDataLogger,
     DiagnosticSource diagnosticSource,
     string commandText,
     IReadOnlyList <IRelationalParameter> parameters)
 => new BadDataRelationalCommand(sensitiveDataLogger, diagnosticSource, commandText, parameters, _values);
コード例 #4
0
 protected override IRelationalCommandBuilder CreateCore(
     ISensitiveDataLogger sensitiveDataLogger,
     DiagnosticSource diagnosticSource,
     IRelationalTypeMapper relationalTypeMapper)
 => new BadDataRelationalCommandBuilder(
     sensitiveDataLogger, diagnosticSource, relationalTypeMapper, Values);
コード例 #5
0
 /// <summary>
 ///     This API supports the Entity Framework Core infrastructure and is not intended to be used
 ///     directly from your code. This API may change or be removed in future releases.
 /// </summary>
 public QueryCompilationContextDependencies With([NotNull] ISensitiveDataLogger <IQueryCompilationContextFactory> logger) => new QueryCompilationContextDependencies(
     Model,
     Check.NotNull(logger, nameof(logger)),
     EntityQueryModelVisitorFactory,
     RequiresMaterializationExpressionVisitorFactory,
     CurrentContext);
コード例 #6
0
 private IRelationalCommand CreateRelationalCommand(
     ISensitiveDataLogger logger = null,
     DiagnosticSource diagnosticSource = null,
     string commandText = "Command Text",
     IReadOnlyList<IRelationalParameter> parameters = null)
     => new RelationalCommand(
         logger ?? new FakeSensitiveDataLogger<RelationalCommand>(),
         diagnosticSource ?? new DiagnosticListener("Fake"),
         commandText,
         parameters ?? new IRelationalParameter[0]);
コード例 #7
0
        /// <summary>
        ///     This API supports the Entity Framework Core infrastructure and is not intended to be used
        ///     directly from your code. This API may change or be removed in future releases.
        /// </summary>
        public static void LogCommandExecuted(
            [NotNull] this ISensitiveDataLogger logger,
            [NotNull] DbCommand command,
            long startTimestamp,
            long currentTimestamp)
        {
            Check.NotNull(logger, nameof(logger));
            Check.NotNull(command, nameof(command));

            if (logger.IsEnabled(LogLevel.Information))
            {
                var logParameterValues
                    = command.Parameters.Count > 0 &&
                      logger.LogSensitiveData;

#pragma warning disable 618
                var logData = new DbCommandLogData(
#pragma warning restore 618
                    command.CommandText.TrimEnd(),
                    command.CommandType,
                    command.CommandTimeout,
                    command.Parameters
                    .Cast <DbParameter>()
                    .Select(
                        p => new DbParameterLogData(
                            p.ParameterName,
                            logParameterValues ? p.Value : "?",
                            logParameterValues,
                            p.Direction,
                            p.DbType,
                            p.IsNullable,
                            p.Size,
                            p.Precision,
                            p.Scale))
                    .ToList(),
                    DeriveTimespan(startTimestamp, currentTimestamp));

                logger.Log(
                    LogLevel.Information,
                    (int)RelationalEventId.ExecutedCommand,
                    logData,
                    null,
                    (state, _) =>
                {
                    var elapsedMilliseconds = DeriveTimespan(startTimestamp, currentTimestamp);

                    return(RelationalStrings.RelationalLoggerExecutedCommand(
                               string.Format(
                                   CultureInfo.InvariantCulture,
                                   string.Format(CultureInfo.InvariantCulture, "{0:N0}", elapsedMilliseconds)),
                               state.Parameters
                               // Interpolation okay here because value is always a string.
                               .Select(p => $"{p.Name}={p.FormatParameter()}")
                               .Join(),
                               state.CommandType,
                               state.CommandTimeout,
                               Environment.NewLine,
                               state.CommandText));
                });
            }
        }