如何使用 Entity Framework 的 DbContext

微软的 Entity Framework 是一个开源的 对象-关系映射 ORM 框架,它帮助我们打通了 数据库的数据模型代码层的领域模型,Entity Framework 简化了应用程序对数据库的 CURD 操作,而且还向高层屏蔽了数据是如何持久化到数据库的。

说的具体一点就是 DbContext 充当了数据库到领域模型之间的桥梁,这篇文章我们将会讨论如何配置 DbContext 并使用 Entity Framework Core provider 对数据库进行 CURD 操作。

DbContext

DbContext 是 EF 中非常重要的一个组件,它扮演着 Database 的会话连接,使用它可以查询数据到你的 entitys 集合中,也可以通过它将 entitys 保存到底层数据库中, EntityFramework Core 中的 DbContext 拥有如下几个功能模块。

  • 连接管理

  • 查询数据

  • 持久化数据

  • 修改跟踪

  • 缓存

  • 事务管理

要想使用 EntityFramework,需要通过 nuget 引用 Microsoft.EntityFrameworkCore 包,可以通过 Visual Studio 2019 的 NuGet package manager 可视化界面安装 或者 通过 NuGet package manager 命令行工具输入以下命令:


dotnet add package Microsoft.EntityFrameworkCore

接下来讨论下如何在  ASP.Net Core 中使用 DbContext 。

创建 DbContext

首先创建一个 CustomContext 类,并继承 Entity Framework 中的基类 DbContext,如下代码所示:

public class CustomContext : DbContext{public CustomContext(DbContextOptions options) : base(options){}protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){//Write your code here to configure the context}protected override void OnModelCreating(ModelBuilder modelBuilder){//Write your code here to configure the model}}

可以看到 CustomContext 的构造函数中接受了 DbContextOptions 类型的参数,该类主要用于对 DbContext 做一些必要的参数配置,当然你也可以在 OnConfiguring() 中对 DbContext 进行配置,接下来的 OnModelCreating() 方法用于对 model 进行配置。

下面我在 CustomContext 中新增几个 DbSet<TEntity> 属性用来表示实体集合,如下代码所示:

public class CustomContext : DbContext{public CustomContext(DbContextOptions options) : base(options){}protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){}protected override void OnModelCreating(ModelBuilder modelBuilder){}public DbSet<Author> Authors { get; set; }public DbSet<Blog> Blogs { get; set; }}public class Author{public int AuthorID { get; set; }public string AuthorName { get; set; }}public class Blog{public int BlogID { get; set; }public string BlogName { get; set; }public int AuthorID { get; set; }}

注册 DbContext 注入到 ASP.NET Core 运行时

要想在 ASP.NET Core 中使用,需要将 CustomerContext 注入到 ServiceCollection 容器中,这里采用 SqlServer 作为底层存储,所以还需要在 NuGet 上引用 Microsoft.EntityFrameworkCore.SqlServer 包,接下来在 Startup.ConfigureServices() 中新增如下代码:

public class Startup{// This method gets called by the runtime. Use this method to add services to the container.public void ConfigureServices(IServiceCollection services){services.AddControllersWithViews();services.AddDbContext<CustomContext>(options => options.UseSqlServer("Data Source=.; Initial Catalog=MyTest; Trusted_Connection=Yes"));}}

DbContext 依赖注入

现在 CustomContext 已经注入到容器了,接下来就可以在 HomeController 中通过依赖注入的方式获取 CustomerContext 实例,下面的代码片段展示了如何去实现。

public class HomeController : Controller{ILogger<HomeController> logger;private CustomContext dbContext;public HomeController(ILogger<HomeController> logger, CustomContext dbContext){this.logger = logger;this.dbContext = dbContext;dbContext.Database.EnsureCreated();}}

上面的代码,我用了 dbContext.Database.EnsureCreated(); 来确保数据库已经成功创建,执行完这句代码之后,数据库将会生成 MyTest 数据库 和  Author,Blog 两张表结构,如下图所示:

接下来在 Index 方法中插入一条记录并查询,效果如下:

这就是配置 EF 所要做的所有事情,现在你可以利用 CustomContext 去所 CURD 操作了,DbContext 在概念上类似 ObjectContext,表示一个 UnitOfWork  组合单元,并且 EF 是DDD领域的一个实现案例,DbContext 的职责就是负责 应用程序 和 数据库 之间的交互,关于 Entity Framework Core 的更多特性,我会放到后面的文章中和大家一起分享。

译文链接:https://www.infoworld.com/article/3311737/how-to-use-the-dbcontext-in-entity-framework-core.html

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

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

相关文章

php绘制饼图,php怎么绘制饼图?

php怎么绘制饼图&#xff1f;在php中&#xff0c;可以使用GD绘制饼图。GD库是php处理图形的扩展库&#xff0c;GD库提供了一系列用来处理图片的API&#xff0c;使用GD库可以处理图片&#xff0c;或者生成图片&#xff0c;也可以给图片加水印。PHP中用GD绘制饼图&#xff0c;绘制…

silklabo哪个公众号有资源_微小说免费渣渣团资源公众号看大全集

“免费小说全本”公众号。小说免费阅读吧|免费小说在线阅读网|免费小说资源|小说传送站&#xff5c;小说免费公众号推荐&#xff5c;免费小说全集书城推荐&#xff5c;免费小说公众号渣渣团&#xff5c;小说免费阅读叶辰萧初然|霸道总裁&#xff5c;先生是谁等全免费&#xff5…

大数据分析苏轼,你没看错,这些都是小学生完成的

适逢苏轼先生诞辰980周年&#xff0c;清华附小开展了一系列致敬苏轼的活动。同学们利用假期时间共完成课题研究报告23份&#xff1a;《大数据帮你进一步认识苏轼》、《苏轼的朋友圈》、《苏轼的旅游品牌价值分析》、《苏轼vs李白》等。是的&#xff0c;你没看错&#xff0c;这些…

深度解读.NET 5授权中间件的执行策略

前文提要2021.1月份我写了一个《这难道不是.NET5 的bug? 在线求锤&#xff1f;》&#xff0c;讲述了我在实现[全局授权访问特例匿名访问] 遇到的技术困惑: [特例匿名访问&#xff0c;怎么走了认证流程&#xff1f;]。博客园上某大佬的看法&#xff1a;大概的意思是说 &…

噪声与振动控制工程手册_仨亿技术丨工程机械噪声与控制分析

随着我国经济的发展&#xff0c;各种工程规模不断扩大、数量不断增多&#xff0c;这些工程在造福于人们并促进我国综合国力提高的同时&#xff0c;也在一定程度上带来一些工程机械噪声的问题。工程机械噪声的存在&#xff0c;不仅给工程机械的使用寿命带来不利影响&#xff0c;…

EFCore查缺补漏(一):依赖注入

前段时间&#xff0c;在群里潜水的时候&#xff0c;看见有个群友的报错日志是这样的&#xff1a;An unhandled exception was thrown by the application. System.OutOfMemoryException: Exception of type System.OutOfMemoryException was thrown.at System.Threading.Thread…

sql倒序排列取第一条_从零学会SQL·三——汇总分析

一、常用汇总函数的练习score表问题&#xff1a;查询课程编号为“0002”的总成绩查询选了课程的学生人数查询学号为“0001”的学生的最高分、最低分和平均分解答SQL语句如下&#xff1a;-- 查询课程编号为“0002”的总成绩 SELECT 学号,SUM(成绩)FROM score WHERE 课程号0002;-…

2017 软件开发薪酬调查:Go 和 Scala 是最赚钱的语言

英文&#xff1a;codeburst&#xff0c;编译&#xff1a;oschina www.oschina.net/news/87499/go-scala-are-the-most-lucrative-languages 每年 O’Reilly 都会发布其年度开发者的调查结果。这项调查涵盖了来自世界 110 个国家的近 7000 名程序员。这里摘几个亮点&#xff1a;…

bootstrap grid php,bootstrap grid用法

bootstrap grid的用法&#xff1a;首先使用container来包裹div&#xff1b;然后在div里面设置行&#xff1b;接着设置列能够快速对这个框架进行搭建&#xff1b;最后通过拖拽浏览器来改变宽窄即可。本文操作环境&#xff1a;Windows7系统、bootstrap3、Dell G3电脑。bootstrap的…

js map对象遍历_前端测试题:有关于js中跨域请求的说法,错误的是?

考核内容:javascript 跨域的使用题发散度: ★试题难度: ★解题思路:什么是跨域&#xff1f;跨域是指一个域下的文档或脚本试图去请求另一个域下的资源&#xff0c;这里跨域是广义的。什么是同源策略&#xff1f;同源策略/SOP(Same origin policy)是一种约定&#xff0c;由Netsc…

管理信息系统案例分析_「案例」MES系统助力华联电子仓库工作人员效率提高30%...

一、企业简介厦门华联电子股份有限公司成立于1984年&#xff0c;注册资金12929万元&#xff0c;现有自主厂房8万平方米&#xff0c;全自动化生产线40多条&#xff0c;员工2400余人&#xff0c;是国内最具规模的智能控制器、光电子器件的生产厂家之一。企业集研发、生产、销售和…

数学系学生的漫画,治愈了整个朋友圈

如何在无趣的世界里&#xff0c;做一个有趣的人&#xff1f; 有时候&#xff0c;无厘头、无意义、有趣性&#xff0c;胜过一切宏大叙事。 “此人脑洞开得很大&#xff0c;且深不见底。”这是网友对tango的描述。 对于画家tango的作品&#xff0c;大家并不陌生&#xff0c;最近他…

孟岩谈Erlang:并行计算和云计算

孟岩谈Erlang&#xff1a;并行计算和云计算 ——写在《Erlang程序设计》出版之际 Erlang算不上是一种“大众流行”的程序设计语言&#xff0c;而且即使是Erlang的支持者&#xff0c;大多数也对于Erlang成为“主流语言”并不持乐观态度。然而&#xff0c;自从2006年以来&#xf…

php获取域名方法,PHP实现获取域名的方法小结

文章主要介绍了PHP实现获取域名的方法,实例总结了常见的获取域名的方法,非常具有实用价值,需要的朋友可以参考下。方法一(用 系统变量)复制代码 代码如下://缺点不使用传递过来的地址和不支持系统变量的主机echo $_SERVER[HTTP_HOST];方法二(用自带函数)复制代码 代码如下:$url…

逻辑回归算法背后的数学

看完Andrew Ng老师的机器学习公开课后&#xff0c;对于逻辑回归部分&#xff0c;打算写篇学习笔记记录总结一下&#xff0c;也和大家共同分享。 1 基本思能 逻辑回归&#xff08;Logistic Regression&#xff09;和线性回归&#xff08;Linear Regression&#xff09;的模型和原…

配置DNS辅助服务器:DNS系列之四

配置DNS辅助服务器在前面的博文中&#xff0c;我们介绍了如何在DNS服务器中创建常用的DNS记录&#xff0c;本文中我们要为大家介绍如何配置DNS的辅助服务器&#xff0c;同时也要介绍一下和辅助区域类似的存根区域。DNS辅助服务器是一种容错设计&#xff0c;考虑的是一旦DNS主服…

笑出腹肌的程序猿搞笑趣图

客户需求 vs 最终产品 requirements vs. implementation 程序员的一天 The Programmers life 寂寞的时候干什么&#xff1f; 写程序写程序写程序 失恋的时候干什么&#xff1f; 写程序写程序写程序 发骚的时候干什么&#xff1f; 写程序写程序写程序 剩下的时候干什么&#xff…

Java图形 图像与多媒体基础,十一. 图形、图像与多媒体1.绘图基础

要在平面上显示文字和绘图&#xff0c;首先要确定一个平面坐标系。Java语言约定&#xff0c;显示屏上一个长方形区域为程序绘图区域&#xff0c;坐标原点(0,0)位于整个区域的左上角。一个坐标点(x,y)对应屏幕窗口中的一个像素&#xff0c;是整数。如图12.1所示。窗口大小由超文…

程序员快来看!经典代码替你省去多少时间?

作为一名程序员&#xff0c;每天坐在电脑前敲敲打打那些重复重复再重复的语句&#xff0c;习惯性的思维总是被套进去&#xff0c;有些时候很容易把简单的事情想复杂了&#xff01;不过&#xff0c;我们反其道而行之&#xff0c;新手们只要是把下面的语句牢记&#xff0c;很多情…

php中sql删除,学习猿地-php sql删除语句是什么

php sql删除语句是“DELETE FROM”&#xff0c;该语句用于从数据库表中删除行&#xff0c;其语法是“DELETE FROM table_name WHERE column_name some_value”。PHP MySQL Delete FromDELETE FROM 语句用于从数据库表中删除行。删除数据库中的数据DELETE FROM 语句用于从数据库…