EF Core 6 简化的数据库上下文注册

EF Core 6 简化的数据库上下文注册

Intro

EF Core 6 将简化现在的服务注册,DbContext 的服务注册将会更简单一些

Sample

直接来看示例代码吧:

现在我们注册 EF Core 的 DbContext 通常是这样的:

const string connectionString = "DataSource=test";
var services = new ServiceCollection();
services.AddDbContext<TestDbContext>(options => options.UseSqlite(connectionString));

在 EF Core 6 中将会得以简化成下面的形式:

const string connectionString = "DataSource=test";
var services = new ServiceCollection();
services.AddSqlite<TestDbContext>(connectionString);

这两种方式是完全等价的

完整示例:

const string connectionString = "DataSource=test";var services = new ServiceCollection();services.AddSqlite<TestDbContext>(connectionString);using var serviceProvider = services.BuildServiceProvider();using var scope = serviceProvider.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService<TestDbContext>();
dbContext.Database.EnsureDeleted();
dbContext.Database.EnsureCreated();
dbContext.Users.Add(new User 
{ Name = "Alice",CreatedAt = DateTime.UtcNow
});
await dbContext.SaveChangesAsync();var users = await dbContext.Users.AsNoTracking().ToArrayAsync();
users.Dump();

输出如下,可以看出来工作正常

7c31a58e91b2085eb5063e821abb3be4.png

output

示例代码完整代码可以从 Github 获取:https://github.com/WeihanLi/SamplesInPractice/blob/master/EF6Samples/Program.cs

Implement

其实现方式其实就是封装了一个扩展方法,扩展方法实现如下:

public static IServiceCollection AddSqlite<TContext>(this IServiceCollection serviceCollection, string connectionString, Action<SqliteDbContextOptionsBuilder>? sqliteOptionsAction = null, Action<DbContextOptionsBuilder>? optionsAction = null)where TContext : DbContext
{Check.NotNull(serviceCollection, nameof(serviceCollection));Check.NotEmpty(connectionString, nameof(connectionString));return serviceCollection.AddDbContext<TContext>((serviceProvider, options) =>{optionsAction?.Invoke(options);options.UseSqlite(connectionString, sqliteOptionsAction);});
}

更多细节可以参考 Github 上的 issue 和 pr

https://github.com/dotnet/efcore/issues/25192

https://github.com/dotnet/efcore/pull/25220

References

  • https://github.com/dotnet/efcore/issues/25192

  • https://github.com/dotnet/efcore/pull/25220

  • https://github.com/WeihanLi/SamplesInPractice/blob/master/EF6Samples/Program.cs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297976.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx指南

Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器&#xff0c;也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。更多的请见官方wiki&#xff1a;http://wiki.nginx.org/Main 。 其优点…

快要“成精”的波士顿机械狗,开始卖了,价格不贵准备搞一只

全世界只有3.14 % 的人关注了爆炸吧知识重磅消息&#xff1a;这只全球著名的网红狗终于。。开&#xff01;售&#xff01;了&#xff01;哦&#xff0c;不对&#xff0c;放错图了&#xff01;应该是这只&#xff01;一起来看看视频介绍——6月17日&#xff0c;据科技时报&#…

php3.23,MySQL 3.23.40 又发布了-PHP教程,PHP基础

mysql 3.23.40 又发布了。修正了–low-priority-updates 和 insert 的问题。修正了从进程在一些特别的情况下超前主进程 22 字节的问题。为复制增加了 slave_wait_timeout修正了 update 和 bdb 表的问题。修正了bdb 表使用 key parts 的问题。修正了使用 grant file on databas…

用java写了一个汉诺塔

package com.brzhang;/*** 汉诺塔* 开始盘子全部都放在第一根柱子上* 目的&#xff1a;将第一根柱子上的盘子全部移动到第三根柱子上&#xff0c;规则是不能编号较大的盘子放在编号交小的盘子上面。**/ public class HanoTa {private long steps 1l;/**** param n 盘子个数* p…

python with循环_Python for循环、while循环

Python中有两种循环&#xff0c;分别为&#xff1a;for循环和while循环。for循环for循环可以用来遍历某一对象(遍历&#xff1a;通俗点说&#xff0c;就是把这个循环中的第一个元素到最后一个元素依次访问一次)。for循环的基本结构如下&#xff1a;具体看这个案例&#xff1a;设…

BeetleX.WebFamily文件图片管理集成

BeetleX.WebFamily在2.4.8版本中集文件管理功能&#xff0c;通过这一功能可以不写任何代码的情况即可集成文件和图片的上传管理功能。接下来详细介绍下如何引入这一功能组件。文件管理功能是基于Vue和Element&#xff0c;所以只有在BeetleX.WebFamily中使用Vue和Element模板才能…

文字中间加横线效果

priceTV.setText("价格&#xff1a;2.00元"); priceTV.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);

解题报告 树形图计数

1. 题目 树形图计数 count.pas/c/cpp 【问题描述】 小k同学最近正在研究最小树形图问题。所谓树形图&#xff0c;是指有向图的一棵有根的生成树&#xff0c;其中树的每一条边的指向恰好都是从根指向叶结点的方向。现在小k在纸上画了一个图&#xff0c;他想让你帮忙数一下…

怎么部署_2020怎么部署新零售商城?

移动电子商务的发展壮大&#xff0c;5g网络技术的扶持&#xff0c;新零售概念时代推动店家完成零售转型&#xff0c;网上零售商城&#xff0c;再加上线下与推广线下的玩法&#xff0c;带来了效率和效益的提升。一&#xff0c;运用社交媒介&#xff0c;大力发展新零售概念下的销…

ARM立即数讲解--LDR和MOV的区别 .

Mov 是把立即数赋给一个寄存器&#xff0c;但对立即数的范围有要求。只能是由8bit连续有效位通过偶数次移位能得到的数。如果立即数超出这个范围&#xff0c;就没办法用一条MOV指令给寄存器赋值。LDR除了普通的读数之外&#xff0c;也有给寄存器赋立即数的功能。你只要写 LDR R…

python self 值自动改变,在python中对self的理解

在python中对self的理解 &#xff1a;一、self的位置是出现在哪里&#xff1f;首先&#xff0c;self是在类的方法中的&#xff0c;在调用此方法时&#xff0c;不用给self赋值&#xff0c;Python会自动给他赋值&#xff0c;而且这个值就是类的实例--对象本身。也可以将self换成别…

各种震撼的慢镜头,奇怪的知识又增加了!​

全世界只有3.14 % 的人关注了爆炸吧知识慢镜头&#xff08;高速摄影&#xff09;可能是现代最伟大的发明之一。从身边的日常到那些比较罕见的事物&#xff0c;慢镜头下看起来都比平时更酷&#xff01;喵星人接球这行云流水的动作&#xff0c;秒杀国足&#xff01;这是用多台风扇…

Dapr牵手.NET学习笔记:跨物理机负载均衡服务调用

dpar在同一台电脑上不能run 相同appid&#xff0c;这个在上篇说过&#xff0c;所以就用外部负载均衡nginx来对应&#xff0c;那在不同的host中跑同一服务&#xff0c;看看dapr内部的负载均衡是怎么实现的。说说现有的服务&#xff0c;两个服务&#xff0c;订单服务&#xff0c;…

电脑编程教学_2020太原数控车床电脑编程一对一实操教学不限学时

2020太原数控车床电脑编程一对一实操教学不限学时石家庄工之艺数培训学校培训‘数控技术员’ 学生时&#xff0c;拿到图纸和毛坯,能够自己的在数控机床上做出成品。实行教学&#xff0c;“小班授课&#xff0c;一对一的教&#xff0c;理论实践相结合&#xff0c;随到随学&#…

多功能复合机基于用户认证功能的实现过程详解

多功能复合机基于用户认证功能的实现方法 -----网络设备共享案例分析 公司需求&#xff1a;***是一家租售写字楼的服务性企业&#xff0c;主要是针对小型企业进行出租&#xff0c;房间有大有小&#xff0c;大的可以容纳5-10人&#xff0c;小的可以容纳1-4人左右。由于都是一些小…

商女不知亡国恨,一天到晚敲代码

满园春色关不住 一串代码飘出来。日照屏幕直冒烟, 遥看代码挂前川。春眠不觉晓&#xff0c;处处敲代码。春宵一刻值千金&#xff0c;完事起来敲代码。洛阳亲友如相问&#xff0c;就说我在敲代码。夜阑卧听风吹雨&#xff0c;做梦还在敲代码。举头望明月&#xff0c;低头敲代码。…

用python写简单爬虫,用Python写简单的爬虫

准备&#xff1a;1.扒网页&#xff0c;根据URL来获取网页信息importurllib.parseimporturllib.requestresponse urllib.request.urlopen("https://www.cnblogs.com")print(response.read())urlopen方法urlopen(url, data, timeout)url即为URL&#xff0c;data是访问U…

换种方式去分页(转)

为什么要换种方式分页&#xff0c;一个字&#xff1a;太慢了 分页要传入的参数&#xff0c;1&#xff1a;页号&#xff0c;2&#xff1a;行数 分页要取到的数据&#xff0c; 1&#xff1a;总行数&#xff0c;2&#xff1a;单页数据 http://www.cnblogs.com/mikedeng/p/be…

单元测试(二)基本使用争议篇

介绍常用的单元测试是测试方法、API等&#xff0c;下面我们来演示一下Xunit测试框架的简单使用&#xff0c;有些是为了演示而写的单元测试。最下面有反转&#xff0c;一定要看到最后操作创建单元测试项目本次文章还在原来项目的基础上进行操作&#xff0c;右键解决方案添加单元…

听说你趁我不在家,欺负我老婆?

1 听说你趁我不在家欺负我老婆了&#xff1f;▼2 当男生们聚在一起时他们都会做什么&#xff1f;▼3 其实我是广西人&#xff0c;每顿要嗦1吨粉▼4 山西人的饮水机里放的都是醋&#xff1f;▼5 可现实中又有几个总裁没有啤酒肚呢&#xff1f;▼6 开学考试&#xff0c;一考…