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); }
/// <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); } }