登录ef core 2.2有一个更简单的语法——更像是asp.net core

记录ef-core的内存操作和SQL操作自ef-core到来以来已经发展了几次。它利用了与ASP.NET核心使用的相同的底层功能。如果您使用的是ASP.NET核心,日志记录是经过烘焙的,对于ef核心打开它并添加过滤非常简单。查看肖恩·威尔德茅斯的博客帖子ASP.NET核心中的EF核心日志记录.

但是如果您不使用ASP.NET核心,这有点复杂。不是很严重,但是还有一些额外的工作要做。它涉及在dbContext中设置iLoggerFactory并同时定义任何过滤器。

我在之前的msdn杂志上写了一篇关于这个的文章(重点是利用ef核心日志记录的各种可用过滤器),哦,等等,现在是1月1日,所以我可以说“最后一年”。数据点–在EF核心中记录SQL和更改跟踪事件.我也在我的EF核心2入门当然,EF核心2:映射EF核心2.1:新功能多元化课程。(请注意,我已经将入门课程的示例代码更新为ef core 2.2,并将其放到了github上github.com/julielerman/multiplesightefcore2getingstarted

我的文章和课程使用控制台应用程序来演示EF核心行为,因此控制台日志提供者将日志程序与控制台联系起来。请注意,数据点文章包含了许多关于各种过滤类型的详细信息。所以您可以使用下面的新语法来指定应该有一个过滤器,但是一定要阅读这篇文章来了解过滤的风格,以及根据您所做的选择,您能够看到哪些类型的细节。

但是日志API不断发展,并提供了一些与ASP.NET创建的相同的快捷方式。并且consoleloggerprovider已被弃用。API不是EF核心的一部分。它是.NET核心的一部分。EF核心和ASP.NET核心都使用它。

如果您使用的是EF Core 2.2,语法已经改变了(简化了),在3.0中它将变得更加流线型。

事实上,如果将前面的语法与2.2一起使用,您将收到有关ConsoleLoggerProvider的警告:

obsolete(“此方法已过时,将在未来版本中删除。建议的替代方法是使用loggerfactory配置筛选,并使用consoleloggeroptions配置日志记录选项。“)

就比较而言,下面是一个使用旧语法打开日志记录的示例,只显示与数据库命令相关的日志,只显示标记为“信息”的消息。

EF核心2.0和2.1逻辑

public static readonly loggerfactory myconsoleloggerfactory=new loggerfactory(new[]new consoleloggerprovider((category,level)=>category==dbloggercategory.database.command.name&&level==loglevel.information,正确));

一旦在上下文类中定义了logger工厂字段,就告诉dbContext在配置时使用它。

protected override void onconfiguring(dbContextOptionsBuilder OptionsBuilder)var connectionString=configurationManager.connectionStrings[“wpfdatabase”].toString();选项builder.useloggerfactory(myconsoleloggerfactory)。启用敏感数据记录(true)。usesqlserver(connectionString);}

所以这是记录器工厂的创建,它的语法有点复杂。新的API遵循了ASP.NET核心如何让您使用以过滤器为参数的addfilter方法进行过滤。不需要羔羊。另外,配置过滤器是一个单独的逻辑位,它告诉日志记录器它应该绑定到控制台。

EF核心2.2逻辑

有了EF核心2.2,您可以在构造函数或其他方法中设置记录器工厂,只要在配置选项生成器时该工厂可用。我在一个方法中创建它,然后使用该方法作为useLoggerFactory的参数。我仍在筛选只显示标记为信息的数据库命令和日志详细信息。

private iloggerFactory getloggerFactory()IServiceCollection serviceCollection=new serviceCollection();servicecollection.addlogging(builder=>builder.addconsole().addfilter(dbloggercategory.database.command.name,loglevel.information));返回ServiceCollection.BuildServiceProvider().GetService
             
              ();}
             

然后在选项builder的useLogging方法中调用getLoggerFactory():

选项builder.useLoggerFactory(getLoggerFactory())

文件包和参考

为了使用addconsole()方法,你还得用Microsoft.extensions.logging.console(Microsoft.extensions.logging.console)以前的consoleloggerprovider所在的包。然而,命名空间不需要using语句(就像对consoleloggerprovider所做的那样)。

注册我的新闻稿所以你不要错过我的会议和多元化课程公告!

3“思考”登录ef core 2.2有一个更简单的语法——更像是asp.net core他说:“这是一个很好的选择。”

  1. 你好,

    请为ef core 2.2日志逻辑共享一个简单完整的工作示例。尝试在Xamarin表单中使用ef core 2.2逻辑/ef core应用程序数据库上下文类,使用vs 2017社区和控制台窗口甚至没有启动。
    除了这段代码,还有什么需要补充的吗?

  2. 嗨,朱莉,是否有要在生成的SQL语句中包含额外说明的扩展。包含对SQL语句日志的描述会很有帮助。

    比如:
    “用于获取计划的SQL…”
    从筛选的表中选择*。

    现在我看到的只是SQL语句,当我在一个批处理中运行时,我甚至无法知道要查看哪个日志条目。

    谢谢。

答复DF5型取消答复

您的电子邮件地址将不会发布。已标记必需字段*

此网站使用Akismet来减少垃圾邮件。了解如何处理评论数据.