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

记录ef-core的内存操作和SQL操作自ef-core到来以来已经发展了几次。它利用了与ASP.NET核心使用的相同的底层功能。如果您使用的是ASP.NET核心,日志记录是经过烘焙的,对于ef核心打开它并添加过滤非常简单。参见Shawn Wildermuth的博客文章ASP.NET核心中的EF核心日志记录.

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

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

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

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

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

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

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

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

EF核心2.0和2.1逻辑

MyConsoleLoggerFactory = new LoggerFactory(new[] {new ConsoleLoggerProvider((类别,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的参数。我仍在筛选只显示标记为信息的数据库命令和日志详细信息。

{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以前的consoleloggerprovider所在的包。然而,您不需要对名称空间使用using语句(就像您对ConsoleLoggerProvider所做的那样)。

获取用于Linux CTP2.0 Docker映像的SQL Server 2019

如果您习惯于从microsoft存储库中提取mssql-server映像,例如。,

Docker Pull Microsoft/MSSQL服务器

这对2019年的CTP计划来说是行不通的。

我可以使用以前的存储库拒绝(又称更新),但这对CTP来说不起作用vnext-ctp2.0-ubuntu.

我终于注意到在Docker Hub页面上新的docker pull命令

上面写着:docker pull mcr.microsoft.com/mssql/server

因此,使用CTP标签拉CTP的命令如下:

docker pull mcr.microsoft.com/mssql/server:vnext-ctp2.0-ubuntu

感谢微软第16届MVP奖

15年前,7月1日2003,我在邮件里收到一个惊喜。一个信封,上面有这张纸,欢迎我参加微软MVP计划,了解我过去一年在社区里所做的事情。信不信由你,第一个奖项是由微软学术界发起的,因为我和ineta一起做的一件事就是和大学生一起工作。

那张纸刚从信封里拿出来,我跳上车,开了15英里到我丈夫在屋顶工作的地方,让他从屋顶下来让我给他看。我既兴奋又惊讶。即使这封信不是完全出乎意料,有人跟我联系,要我像这些天的副总裁一样填写一份表格,我相信我也会同样感到惊讶和兴奋。

从那以后,我很荣幸每年7月1日都能获得这个奖项,因为我做了很多事情,试图通过分享我所学到的知识来缩短其他程序员的学习曲线。我不认为获奖是理所当然的。我只是跟着我的心做我想做的事情,如果这恰好是他们在做评估时想要的,那我很感激你的特别认可。

我知道,对于许多今年没有重新获得奖项的长期MVP和对MVP负责人(aka社区项目经理(aka CMP))来说,这是一个艰难的一周,他们给这些MVP中的每个人打了私人电话,试图让他们尽可能温和地了解他们。鉴于此,我非常感谢继续参与2018年7月至2019年6月期间的计划。

Pluralsight订阅本周特价!

Pluralsight正在进行夏季特卖年费- $100优惠(即199美元的全年访问整个图书馆)这是一个相当惊人的价格,你所得到的。如果你把299美元一年的常规价格与几乎任何形式的专家作家培训的成本相比,那简直是惊人的。不管怎样,我不必告诉你,你已经知道了!

199美元的价格是新订阅的,更新现有订阅,甚至从每月订阅转换!

EF Core的配置和日志

我对今天的一些行为有点困惑,最后意识到我的错误,所以我想我会分享它。这主要发生在我正在构建的不使用ASP.NET核心的演示应用程序中。

在这些情况下,我通常将DbContext提供程序配置放在onmodelconfiguration方法中。例如,如果我用的是sqlite,然后我将在方法中指定如下:

保护覆盖无效配置(dbContextOptionsBuilder选项Builder)选项builder.usesqlite(@“filename=data/pubstracker.db”);}

我也经常使用伐木厂。定义之后,我也配置它。我不太考虑我在哪里,所以把它随意地加了进去。

受保护的覆盖无效配置(dbContextOptionsBuilder OptionsBuilder)OptionsBuilder.useLoggerFactory(myConneleLoggerFactory);选项builder.usesqlite(@“filename=data/pubstracker.db”);}

然后我在一些测试中添加了不得不避免SQLite提供程序(如果InMemory提供程序已经配置好了),因此,我对usesqlite方法进行了包装,检查是否已经配置了选项生成器。

受保护的覆盖无效配置(dbContextOptionsBuilder OptionsBuilder)OptionsBuilder.useLoggerFactory(myConneleLoggerFactory);如果(!)optionsbuilder.isconfigured)optionsbuilder.usesqlite(@“filename=data/pubstracker.db”);}}

但我的逻辑不起作用。我进行了一些迁移,但是他们突然不认识usesqlite方法。我已经用过很多次了。我花了一段时间才意识到发生了什么事。使用记录器工厂是一个配置

我只需要在配置了检查之后移动useloggerfactory逻辑,一切都很好。

这是一个愚蠢的事情,你不会想象别人会犯这样的错误。但因为它咬了我,我认为这是值得分享的,主要是为了下一个程序员谁试图解决相同的问题。

在ef core 2.1中定义定义查询

我必须从我为一本杂志写的一篇太长的文章中删去一些文字(当它出版时链接)。下面是一个简单的例子,使用新的toquery方法在ef core 2.1中创建一个定义查询(当前在预览版2中)。

ToQuery与新的查询类型功能这允许您使用没有映射到数据库中的表的类型,因此也不是真正的实体,不需要密钥,不跟踪更改。

我从一个包含这两个实体的简单模型开始,映射到我的dbContext中的表。

公共类团队{公共int TeamId {get;集合;}公共字符串名称get;集合;}公共字符串twitteralias get;集合;}公众名单成员获得;集合;}}public class teammember public int teammemberid获取;集合;}公共字符串名称get;集合;}公共字符串角色get;集合;}public int teamid获取;集合;}公共时间跨度,典型时间间隔获取;私人集合;} public void CalculateCommuteTime (DateTime start,datetime end)typicalcommutetime=end.subtract(start);}}

您需要预先定义用于定义查询的类型,我的将为团队成员提供姓名和典型的工作时间。

公共类团队通勤公共团队通勤(字符串名称,TimeSpan通勤时间)名称=名称;typicalcommutetime=通勤时间;}公共字符串名称{get;集合;}公共时间跨度,典型时间间隔获取;集合;}}

您可以直接在OnModelBuilding中使用原始SQL和FromSQL,或者在名为ToQuery的新方法中使用Linq查询来定义查询。下面是将查询类型与定义查询和LINQ一起使用的示例:

模型生成器.query
          
           ()
          ToQuery(())>团队成员。选择(m=>新建团队通勤(m.name,m.典型时间)

在teamcomment类上定义了这个查询,你现在可以在你的代码查询中使用它,例如:

var comments=context.query ().ToList ();

请记住,不能在同一类型上同时定义toquery和toview映射。

新Pluralsight课程!EF核心2:入门

我最近在multuralsight.com上发表了我的第19门课程:实体框架核心2:入门yabo官网.

它长2小时40分钟,专注于基础知识。

这是在Visual Studio 2017中使用的ef core 2.0.1。

未来计划:我已经开始学习一门中级课程,并准备继续学习其他课程,比如在EF Core 2.1发布时介绍它的特性(为了稳定,我将等到它拥有RTMd),以及其他高级主题。我还计划在macOS上使用VS代码做一个跨平台版本,因为这是我最近的爱好。

如果你不是一个多元化的订户,寄给我一张便条我可以给你30天的试用期,这样你就可以看课程了。警告:该试验类似于成为订户的网关药物。

这是目录课程

介绍一个新的,重量较轻版本的EF 32m 40s
简介和概述
什么是实体框架核心?yabo官网
在哪里可以用EF Core构建和运行应用程序
EF核心工作原理
从ef6到ef core到ef core的路径
EF核心2新功能
展望英孚核心2.1及更高版本
审查和资源

利用ef core__42M 36S创建数据模型和数据库
简介和概述
设置解决方案
使用NuGet包管理器添加EF Core
使用EF核心创建数据模型
指定数据提供程序和连接字符串
了解EF核心迁移
添加第一次迁移
检查您的第一次迁移
使用迁移编写脚本或直接创建数据库
在.NET Core中重新创建模型
添加多对多和一对一关系
对现有数据库进行逆向工程
审查和资源

与您的EF核心数据模型34M 11S交互
简介和概述
获取EF核心以输出SQL日志
插入简单的对象
保存时批处理命令
查询简单对象
在查询中过滤数据
更新简单对象
断开连接的更新
删除具有EF核心的对象
审查和资源

查询保存相关数据20M 49S
简介和概述
插入相关数据
预加载相关数据
在查询中投影相关数据
使用相关数据筛选对象
修改相关数据
审查和资源

在应用程序中使用EF核心30M 52S
简介和概述
桌面或设备上的EF核心
桌面应用程序:Windows演示基础(WPF)
创建WPF应用程序
浏览WPF数据访问
ASP.NET核心MVC中的EF核心
将相关数据添加到MVC应用程序中
对MVC应用程序的关系进行编码
审查和资源