.Identity框架(2)和EFCore的性能优化利器的学习

一.Identity框架处理登录请求Login方法

在Program.cs中加入

二.Identity框架实现密码的重置

流程:

1.生成重置Token

2.Token发给客户 (邮件,短信等),形式:连接、验证码等。

3.根据Token完成密码的重置。

在Program.cs中

实现重置密码

三.EFCore优化之AsNoTracking

我们看生成的sqlsql是生成的一模一样,但是执行时间却是4.8倍。原因仅仅只是第一条EF语句多加了一个AsNoTracking。注意:AsNoTracking干什么的呢?无跟踪查询而已,也就是说查询出来的对象不能直接做修改。所以,我们在做数据集合查询显示,而又不需要对集合修改并更新到…

扫描二维码关注公众号,回复: 15947433 查看本文章

我们看生成的sql

sql是生成的一模一样,但是执行时间却是4.8倍。原因仅仅只是第一条EF语句多加了一个AsNoTracking。

注意:

AsNoTracking干什么的呢?无跟踪查询而已,也就是说查询出来的对象不能直接做修改。所以,我们在做数据集合查询显示,而又不需要对集合修改并更新到数据库的时候,一定不要忘记加上AsNoTracking。

四.Find和FindAsync方法

当使用EF Core 从数据库中根据 Id获取数据的时候,除了可以使用ctx.Books.Single(b=>b.Id==id)之外,我们还可以使用同步的Find方法或者异步的FindAsync法,比如:Book b=ctx.Books.Find(2)。

Find 或者 FindAsync方法(以下简称为Find)会先在上下文查找这个对象是否已经被跟踪,

如果对象已经被跟踪,就直接返回被跟踪的对象,只有在本地没有找到这个对象时,EF Core

才去数据库查询,而 Single方法则一直都是执行一次数据库查询。因此用 Find 方法有可能减

少一次数据库查询,性能更好。但是如果在对象被跟踪之后,数据库中对应的数据已经被其他

程序修改了,则 Find 方法可能会返回旧数据。

五.EFcore高效的删除更新数据

EF Core 不持高效地删除、更新和插入数据,所有的操作都要逐条数据进行处理。比

如,如果使用如下的语句实现“删除所有价格高于 10元的书”:ctx.RemoveRange(ctx.Book

Where(b=> b.Price>33)),EF Core 会先执行 Select * from books where price>33,然后对每一条

数据执行 delete from books where id-@id 进行删除。EF Core 中批量数据的更新原理也是类似

的。如果更新或者删除的数据量少的话,上面的操作影响不大,但是如果有大量数据需要更或者删除,这样的操作性能就会非常低。

六.全局查询筛选器

全局查询筛选器是应用于元数据模型(通常为 OnModelCreating)中的实体类型的 LINQ 查询谓词。 查询谓词即通常传递给 LINQ Where 查询运算符的布尔表达式。 EF Core 会自动将此类筛选器应用于涉及这些实体类型的任何 LINQ 查询。 EF Core 还将其应用于使用 Include 或导航属性进行间接引用的实体类型。 此功能的一些常见应用如下:

  • 软删除 - 实体类型定义 IsDeleted 属性。

  • 多租户 - 实体类型定义 TenantId 属性。

猜你喜欢

转载自blog.csdn.net/qq_71012549/article/details/128568766