Используя EF Core (или любой ORM, если на то пошло), я хочу отслеживать количество запросов, которые ORM делает для базы данных во время некоторой операции в моем программном обеспечении.
Я раньше использовал SQLAlchemy под Python, и в этом стеке это легко настроить. Обычно у меня есть модульные тесты, которые утверждают число запросов, сделанных для сценария, в базе данных SQLite в памяти.
Теперь я хочу сделать то же самое, используя EF Core, и посмотрел Документацию по протоколированию.
В моем тестовом установочном коде я делаю, как говорится в документации:
using (var db = new BloggingContext())
{
var serviceProvider = db.GetInfrastructure<IServiceProvider>();
var loggerFactory = serviceProvider.GetService<ILoggerFactory>();
loggerFactory.AddProvider(new MyLoggerProvider());
}
Но я сталкиваюсь с проблемами, которые, как я подозреваю, являются результатом следующих (также из документов):
Вам нужно только зарегистрировать регистратор с помощью одного экземпляра контекста. После того, как вы зарегистрировали его, он будет использоваться для всех других экземпляров контекста в том же AppDomain.
Проблемы, которые я вижу в своих тестах, указывают на то, что моя реализация logger делится на несколько контекстов (это соответствует документам, когда я их читал). И так как a) мой тестовый бегун выполняет тесты в параллельном режиме и b) весь тестовый набор создает сотни контекстов db - он не работает очень хорошо.
Вопрос/вопросы:
- Я хочу, чтобы это было возможно?
- т.е. могу ли я зарегистрировать регистратор с контекстом db, который используется только для этого экземпляра контекста db?
- Есть ли другие способы сделать то, что я пытаюсь сделать?