欢迎光临散文网 会员登陆 & 注册

.NET 6教程,.Net Core 2022视频教程,杨中科主讲

2023-08-03 18:14 作者:孙酸儿  | 我要投稿

异步

异步方法 在方法未完成前 会运行别的线程任务,等待异步执行后才会继续进行

异步方法的缺点:

1、异步方法会生成一个类,运行效率没有普通方法高

2、可能会占用非常多的线程

使用等待

Task.Delay()

Thread.Sleep()会阻塞当前线程

CancellationToken 提前终止任务

(浏览器关闭,对应的服务器端也应该进行关闭)

接口不用修饰Async 接口一般就定义返回值、参数,没有具体的方法体

yield

LINQ

List.Any(可以带条件)

判断是否至少有一条数据 与Count差不多,不过count是总数量,Any是只有有一条就返回 效率比较高

依赖注入DI

简化模块的组装过程,降低模块之间的耦合度

三种类型

Singleton(单列_一半不需要类状态的话)

Scope(在自定范围内使用)

Transient(瞬时每次都会新创建一个对象,比较耗内存)

在注册时分为服务类型、实现类型,这两个类型可以是同一个类

配置系统

三种配置方式

IOptions<T> 不会读取到新的值 适用于一般配置场景

IOptionsMonitor<T>适用于需要热更新配置并且全局统一的场景

IOptionsSnapshot<T>适用于需要热更新配置并且服务内统一的场景 推荐使用

EF Core

Migration Up Down 向上迁移、向下迁移

Add-Migration name 新增迁移操作

Update-Database 同步到数据库

Update-Database xxx 回滚到xxx的状态

Remove-migration 删除最后一次的迁移脚本

Script-Migration A D 生成迁移SQL代码 A-D

Script-Migration D 生成迁移SQL代码 D-最新

反向工程

根据数据库表来反向生成实体类

DBFirst(数据库优先)

ModelFirst (目前已经不使用了)

CodeFirst(代码优先)


Scaffold-DbContext 

'Server=.;Database=demo1;Trusted_Connection=True;MultipleActiveResultSets=true' Microsoft.EntityFrameworkCore.SqlServer

需注意EF查询的LINQ语句无法编译其中加的自定义方案

EF Core一对多关系配置

HasOne WithMany

Include(关联对象) 查询关联表信息(导航属性)

单向导航属性配置

HasOne().WithMany()

多对多关系配置

HasMany<T>().WithMany().UsingEntity(j=>j.Totable())

IQueryable与IEnumerable

IEnumerable 在内存中操作(客户端评估)

IQueryable 翻译成SQL语句(服务器端评估)

IEnumerable 的查询会取出说有数据,再在内存中进行匹配,效率较差

IQueryable的延迟执行

非总结方法的时候不会执行,GroupBy、Take

执行终结方案会立即查询 ToArray、Min()

如果返回值是IQueryable就是非终结方法

IQueryable默认是使用DatAdapter的方式分批次执行 可以用ToArray()、ToList()一次性加载

EF执行原生SQL语句

非查询语句

dbCtx.Database.ExecuteSqlInterpolated()

实体查询语句

ctx.Entity.FromSqlInterpolated()

任意查询语句(使用原生ADO.NET)

conn = ctx.Database.GetDbConnection();

var cmd = conn.CreateCommand();

cmd.CommandText="";

cmd.ExecuteReaderAsync();

...

如何知道实体数据变了

快照更改跟踪:只要一个实体对象和DBConetent发生任何关系(Select、Add...)都默认会被DbContexnt跟踪

执行SaveChanges时会进行比较

AsNoTracking() 不进行跟踪(只查询,不做修改、删除可以使用,不占用内存)

EF Core全局查询筛选器

builder.HasQueryFil eter(a=>a.id>0)

忽略全局查询筛选器

ctx.entitys.IgnoreQueryFilters().Where()

EF Core并发控制

悲观锁

通过Sql语句来使用并发控制

独占、排他,并发大的话会严重影响性能,使用不当会导致死锁

乐观锁

Update T set TT=新值 where ID =1 and TT=旧值

并发令牌

builder.Property(h=>h.xxx).IsConcurrencyToken();

catch(DbUpdateConcurrencyException ex)

{xxxx}

RowVersion

设置一个byte[]类型的属性做并发令牌属性

每次插入或更新数据库会自动为这一行的RowVersion自动更新值

class House{

public byte[] RowVer{get;set}

}

builder.Property(h=>h.RowVer).IsRowVersion();

表达式树 Expression Tree

Expression<TDelegate>

Expression<Func<Book,Bool>> e1 = b=>b.Price>5;

.Net 6新语法、特性

顶级语句

全局Using引用资源

Using资源管理

文件范围的命名空间声明

可空引用类型

record比较引用




.NET 6教程,.Net Core 2022视频教程,杨中科主讲的评论 (共 条)

分享到微博请遵守国家法律