EFCore_简单使用
EFCore简介ORM:让开发者用对象操作的形式操作关系型数据库。EFCore、Dapper就是常见的ORM
应用程序通过EF Core将C#代码变成Sql语句借助Ado.Net Core与数据库进行操作。
使用建议1、对于后台系统、信息系统等和数据库相关开发工作量大的系统,且团队比较稳定就用EFCore;对于互联网系统等数据库相关工作量不大的系统,或者团队不稳定就用Dapper2、在项目中可以混用,只要注意EFCore的缓存、Tracking等问题即可。
EFCore和EF比较1、EF有DB First、Model First、Code First。EFCore不支持模型优先,推荐使用代码优先,遗留系统可以使用Scaffold DbContext来生成代码实现类似DB First的效果,但是推荐使用Code First。2、EF会对实体上的标注做校验,EF Core追求轻量化,不校验。3、EFCore加了很多新东西。4、EF中的一些类的命名空间以及一些方法的名字在EF Core中稍有不同。5、EF不再做新特性增加。6、EF Core是对底层ADO.NET Core的封装,因此ADO. ...
Asp.NetCore_SignalR
WebSocket需求:Web聊天、站内通知传统HTTP只能客户端主动发送请求传统长轮询方式性能差,不推荐使用基于Tcp协议,支持二进制通信,双工通信性能和并发能力强WebSocket独立于HTTP协议,不过我们一般仍然把WebSocket服务器端部署到Web服务器,因为可以借助HTTP协议完成初始的握手(可选),并且共享HTTP服务器的端口(主要),通过请求的特点决定将请求交给HTTP处理程序或者WebSocket处理程序。
ASP.NET Core SignalR1、SignalR是对.NET Core平台下对WebSocket的封装2、Hub(集线器)类似于路由器,是数据交换中心
使用创建web api项目,创建一个继承Hub的类
123456789public class MyHub : Hub{//这个方法名由客户端调用 public Task SendPublicMsgAsync(string msg) { string connId = this.Context.ConnectionId; string msgToSe ...
Asp.NetCore_校验机制
校验机制.Net Core内置1、在.Net Core中内置了对数据校验的支持,在System.ComponentModel.DataAnnotations这个命名空间下有如:[Required]、[EamilAddress]、[RegularExpression]。CustomValidationAttribute、IValidatableObject。2、内置的校验机制的问题:校验规则都是和模型类耦合在一起,违反“单一职责原则”,很多常用的校验都需要编写自定义校验规则,而且写起来麻烦。
1234567public class DataTest { [Required] public string UserName { get; set; } public string Password { get; set; } [EmailAddress] public string Email { get; set; } }
第三方包(F ...
Asp.NetCore_托管服务
托管服务1、让代码运行在后台。比如服务器启动的时候在后台预先加载数据到缓存,每天凌晨三点把数据导出到备份数据库,每五秒在两张表之间同步一次数据。2、托管服务实现IHostedService接口,一般编写从BackgroundService继承的类。3、services.AddHostedService<DemoBgService>
12345678public class HostedService1 : BackgroundService { protected override async Task ExecuteAsync(CancellationToken stoppingToken) { //在这里面执行后台代码 Console.WriteLine("后台启动"); await Task.Delay(3000); Console.WriteLine("后台代码执行完成"); } ...
Asp.NetCore_JWT
JWTSession描述在浏览器端用户登录后,服务器端生成唯一session id,并且把用户名和session id建立对应关系保存到服务器端,当下次浏览器端访问时携带着cookie和服务器保存session对应,就可以直接登录了。
Session缺点1、对于分布式集群环境,session数据保存在服务器内存中就不合适了,应该放到一个中心状态服务器上。ASP.NET Core支持Session采用Redis、Memcached。2、中心状态服务器有性能问题。
JWT描述1、JWT把登陆信息保存在客户端。2、为了防止客户端数据造假,保存在客户端的令牌经过了签名处理,而签名的密钥只有服务器端才知道,每次服务器端收到客户端提交过来的令牌的时候都要检查一下签名。3、JWT是明文存储的,不要把不能被客户端知道的信息放到JWT中。
JWT优点1、状态保存在客户端,天然适合分布式签名。2、签名保证了客户端无法数据造假。3、性能更高,不需要和中心状态服务器通讯,纯内存计算。
JWT基本使用NuGet安装:System.IdentityModel.Token,生成和校验JWT生成:
123456789 ...
Asp.NetCore_标识框架
标识框架(Identity)Authentication与Authorization1、Authentication对访问者的用户进行验证,“用户是否登录”。2、Authorization验证访问者的用户身份是否有对资源访问的访问权限,“用户是否有权限访问地址”用户可能有多个角色,一个角色可能有多个用户。
标识框架概念1、Identity采用基于角色的访问控制(RBAC)策略,内置了对用户、角色等表的管理,以及相关的接口,支持外部登录、2FA(两阶段验证)等。2、标识框架使用EFCore对数据库进行操作,因此标识框架几乎支持所有数据库。
简单使用1、创建用户类和角色类,一般不自己编写而是创建继承IdentityUser<TKey>、IdentityRole<TKey>的自定义类类,TKey代表主键的类型,可以增加自定义属性。2、NuGet安装:Microsoft.AspNetCore.Identity.EntityFrameworkCore。3、创建继承自IdentityDbContext的类,这个类内置了对IdentityUser<TKey>、Id ...
Asp.NetCore_中间件
中间件概念我怕我解释不清楚,这里直接上课件
基本使用我们建立一个空的asp.net core项目
123456789101112131415161718192021222324public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); //app.MapGet("/", () => "Hello World!"); app.Map("/test", async (pipeBuilder) => { pipeBuilder.Use(async (context, next) => { context.Response.ContentType = " ...
Asp.NetCore_筛选器
筛选器Filter1、Filter是面向切面编程机制,在ASP.NET Core特定的位置执行我们自定义的代码2、有5种Filter类型:Authorization filter、Resource filter、Action filter、Exception filter、Result filter。3、所有筛选器一般有同步异步两个版本比如IActionFilter、IAsyncActionFilter接口
异常筛选器当系统中出现未经处理的异常时,异常筛选器会执行。目标:当系统中出现未处理异常的时候,我们统一给客户端返回如下格式的响应报文:{“code”:”500”,”message”:”异常信息”},对于开发环境中message是异常堆栈,对于其他环境message用一个general的报错信息。实现:实现IAsyncExceptionFilter接口。注入IHostEnvironment得知运行环境。
123456//Action方法 [HttpGet] public string MakeErr() { string s ...
Asp.NetCore_EFCore
多层项目中EFCore的使用实体类:
1234567public class Book { public long Id { get ; set; } public string Title { get; set; } public string AuthorName { get; set; } public double Price { get; set; } public DataSetDateTime PubDate { get; set; }}
配置类:
12345internal class BookConfig : IEntityTypeConfiguration<Book> { public void Configure(EntityTypeBuilder<Book> builder) { builder.ToTable("T_Books" ...
Asp.NetCore_配置系统
配置系统默认添加配置提供者ASP.NET CORE默认添加的配置提供者:1)加载现有的IConfiguration2)加载项目根目录下的appsettings.json3)加载项目根目录下的appsettings.{Environment}.json4)当程序运行在开发环境在,程序会加载“用户机密”配置5)加载环境变量中的配置6)加载命令行中的配置
开发、测试、生产环境不同的环境有不同的配置运行环境:ASP.NET Core会从环境变量中读取名字为ASPNETCORE_ENVIRONMENT的值,推荐值:Development、Staging、Production。读取方法:app.Environment.EnvironmentName、app.Environment.IsDevelopment()……在windows和vs中设置环境变量的方法。
机密信息1、把不方便放到appsetting.json中的机密信息放到一个不在项目中的json文件中。2、在ASP.NET Core项目上单击鼠标右键,选择【管理用户机密】。3、secrets.json文件和项目通过csproj文件中的< ...













