【发布时间】:2018-01-10 07:43:00
【问题描述】:
我知道这听起来像是一个非常愚蠢的问题,但我被困住了。
在Entity Framework > Entity Framework Core > Misc > Logging 页面(顺便说一下,自 2016 年 11 月以来一直没有更新)它告诉您执行以下操作:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder
.UseLoggerFactory(MyLoggerFactory) // Warning: Do not create a new ILoggerFactory instance each time
.UseSqlServer(
@"Server=(localdb)\mssqllocaldb;Database=EFLogging;Trusted_Connection=True;ConnectRetryCount=0");
如果我执行以下操作(将上述内容调整为ConfigureServices 方法),我确实会在每个命令运行时将 SQL 输出到控制台/调试控制台:
services.AddDbContext<MyStoreContext>(options =>
{
options.UseSqlServer(connection);
options.UseLoggerFactory(new LoggerFactory().AddConsole().AddDebug());
});
但是UseLoggerFactory 扩展方法的文档清楚地说:
设置将用于创建 ILoggerFactory 实例的 ILoggerFactory 用于此上下文完成的日志记录。永远不需要调用这个方法 因为 EF 可以自动获取或创建记录器工厂。
使用其中一种时无需调用此方法 'AddDbContext' 方法。'AddDbContext' 将确保 获取EF使用的Microsoft.Extensions.Logging.ILoggerFactory 来自应用服务提供商。
所以看来我不应该使用它,因此我假设它会自动使用我在此处配置的任何内容:
services.AddLogging(options =>
{
options.AddDebug();
options.AddConsole();
}
然而事实并非如此。如果我只在此处“全局”配置日志记录,则不会向控制台输出任何内容。
在 ASP.NET Core 2 下登录 EFCore 2 的正确方法是什么?
【问题讨论】:
标签: asp.net-core-2.0 ef-core-2.0