示例#1
0
        public async Task Should_log_writes()
        {
            var loggerFactory = new ListLoggerFactory();

            var serviceCollection = new ServiceCollection();

            serviceCollection.AddSingleton <ILoggerFactory>(loggerFactory);

            var scopedServices = InMemoryTestHelpers.Instance.CreateContextServices(serviceCollection, CreateModel());

            var customer = new Customer
            {
                Id   = 42,
                Name = "Unikorn"
            };
            var entityEntry = scopedServices.GetRequiredService <IStateManager>().GetOrCreateEntry(customer);

            entityEntry.SetEntityState(EntityState.Added);

            var inMemoryDatabase = scopedServices.GetRequiredService <IInMemoryDatabase>();

            await inMemoryDatabase.SaveChangesAsync(new[] { entityEntry });

            var(Level, _, Message, _, _) = loggerFactory.Log.Single(t => t.Id.Id == InMemoryEventId.ChangesSaved.Id);

            Assert.Equal(LogLevel.Information, Level);
            Assert.Equal(InMemoryResources.LogSavedChanges(new TestLogger <InMemoryLoggingDefinitions>()).GenerateMessage(1), Message);
        }
示例#2
0
    /// <summary>
    ///     This is an internal API that supports the Entity Framework Core infrastructure and not subject to
    ///     the same compatibility standards as public APIs. It may be changed or removed without notice in
    ///     any release. You should only use it directly in your code with extreme caution and knowing that
    ///     doing so can result in application failures when updating to a new Entity Framework Core release.
    /// </summary>
    public static void ChangesSaved(
        this IDiagnosticsLogger <DbLoggerCategory.Update> diagnostics,
        IEnumerable <IUpdateEntry> entries,
        int rowsAffected)
    {
        var definition = InMemoryResources.LogSavedChanges(diagnostics);

        if (diagnostics.ShouldLog(definition))
        {
            definition.Log(diagnostics, rowsAffected);
        }

        if (diagnostics.NeedsEventData(definition, out var diagnosticSourceEnabled, out var simpleLogEnabled))
        {
            var eventData = new SaveChangesEventData(
                definition,
                ChangesSaved,
                entries,
                rowsAffected);

            diagnostics.DispatchEventData(definition, eventData, diagnosticSourceEnabled, simpleLogEnabled);
        }
    }