Entity Framework Core: Log-Abfragen für eine einzige db-context-Instanz

EF-Core (oder jede ORM für diese Angelegenheit) ich möchte, um zu verfolgen die Anzahl der Abfragen, die ORM für die Datenbank während eine operation an meiner software.

Habe ich benutzt SQLAlchemy unter Python frühere, und auf das stack-dies ist faily einfach einzurichten. Ich haben in der Regel unit-tests, die behaupten, auf die Anzahl der Anfragen für ein Szenario, gegen eine in-memory SQLite Datenbank.

Nun möchte ich das gleiche tun mit EF-Core, und habe mir die Protokollierung Dokumentation.

In meinem test-setup code ich tun wie die Dokumentation sagt:

using (var db = new BloggingContext())
{
    var serviceProvider = db.GetInfrastructure<IServiceProvider>();
    var loggerFactory = serviceProvider.GetService<ILoggerFactory>();
    loggerFactory.AddProvider(new MyLoggerProvider());
}

Aber ich laufen in Probleme, die ich vermute, sind die Ergebnisse der folgenden (auch von den docs):

Brauchen Sie nur zu registrieren, den logger mit einem einzigen context-Instanz.
Sobald Sie sich registriert haben, wird es für alle anderen Instanzen
der Kontext, in derselben AppDomain.

Die Probleme sehe ich in meinen tests zeigt an, dass mein logger Umsetzung wird gemeinsam von mehreren Kontexten (dies ist in übereinstimmung mit den docs, da ich Sie lese). Und da a) mein test runner führt tests in parallell und b) meine gesamte test-suite erstellt Hunderte von db - Kontexte- es funktioniert nicht sehr gut.

Frage/Fragen:

  • Ist, was ich will möglich?
  • I. e. registriere ich einen logger mit einem db-Kontext ist nur, dass db-context-Instanz?
  • Gibt es andere Möglichkeiten das zu erreichen, was ich versuche zu tun?
  • Was ist Ihr test-runner; NUnit, MsTest, XUnit?
  • Xunit-Test-runner
  • Haben Sie das herausgefunden? Ich habe versucht, die Filterung für Microsoft.EntityFrameworkCore.Storage.Internal.SqliteRelationalConnection aber nicht alles bekommen.
  • Würde einschließlich Thread.CurrentThread.ManagedThreadId in Ihren logs helfen?
  • Haben Sie versucht, miniprofiler.com
  • werde es versuchen.

InformationsquelleAutor codeape | 2017-04-28
Schreibe einen Kommentar