我对一个使用 EF core 7.0 的项目进行了单元测试。 我使用 InMemory 提供程序来测试对数据库的查询。 每个测试都会生成很多这样的消息:
Context 'MyContext' started tracking 'Player' entity. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see key values.
如果我打开此选项,我会看到以下消息:
Context 'MyContext' started tracking 'Player' entity with key '{Id: 1}'.
有没有办法完全关闭此类消息?
更新
我尝试使用
NullLoggerProvider
,所以我创建数据库的方法如下:
var loggerFactory = new LoggerFactory();
loggerFactory.AddProvider(NullLoggerProvider.Instance);
return new(new DbContextOptionsBuilder<MyContext>()
.UseLoggerFactory(loggerFactory)
.UseInMemoryDatabase(databaseName)
.Options);
我还在测试项目中添加了
appsettings.json
,看起来:
{
"Logging": {
"LogLevel": {
"Default": "None"
}
}
}
但这没有帮助。
在尝试上述解决方案、浏览 EFCore 配置文档并在 xUnit 测试中遇到类似行为(由于日志记录过多导致我的管道失败)后,我从 Microsoft 找到了以下信息:
强烈建议不要使用内存中的提供程序进行测试;考虑改用 SQLite,或实施存储库模式。
此外,如此链接中所述
重要 - 新功能未添加到内存数据库中。
是时候采用不同的方法了!