EntityFramework

EntityFramework Core上下文实例池原理

半世苍凉 提交于 2020-11-08 23:10:02
【导读】 无论是在我个人博客还是著作中,对于上下文实例池都只是通过大量文字描述来讲解其基本原理,而且也是浅尝辄止,导致我们对其认识仍是一知半解,本文我们摆源码,从源头开始分析 希望通过本文从源码的分析,我们大家都能了解到上注入下文和上下文实例池的区别在哪里,什么时候用上下文,什么时候用上下文实例池 友情提醒:此文略长,若心情烦躁、郁闷,无法静心,可以 直接滑至 文末总结 或另安排时间再详细阅读本文 上下文实例池原理准备工作 上下文实例池和线程池原理从概念来上讲一样,都是可重用,但在原理实现上却有本质区别。EF Core定义上下文实例池接口即IDbContextPool,将其接口实现抽象为:租赁(Rent)和归还(Return)。如下: public interface IDbContextPool { DbContext Rent ( ) ; bool Return ( [NotNull] DbContext context ) ; } 那么租赁和归还的机制是什么呢?接下来我们从注入上下文实例池开始讲解。 当我们在Startup中注入上下文和上下文实例池时,其他参数配置我们暂且忽略,从使用上二者最大区别在于,上下文可自定义设置生命周期,默认为Scope,而上下文实例池可自定义最大池大小,默认为128。 那么问题来了,上下文实例池所管理的上下文的生命周期到底是什么呢?我们一探源码究竟

C# 基础知识系列- 14 IO篇 流的使用

主宰稳场 提交于 2020-10-27 16:49:45
0. 前言 继续之前的C# IO流,在前几篇小短片中我们大概看了下C# 的基础IO也对文件、目录和路径的操作有了一定的了解。这一篇开始,给大家演示一下流的各种操作。以文件流为例,一起来看看如何操作吧。 注:之前更新了一篇《Spring Cloud 实战日记》,这是一个新的系列,有兴趣的小伙伴可以从我的账号首页进去看看。 1. 简单的IO流读写文件 先来看一部分代码: class Program { static void Main(string[] args) { var directory = Directory.GetCurrentDirectory(); var program = File.Open("../../../Program.cs", FileMode.OpenOrCreate); // program = File.Open("Program.cs", FileMode.OpenOrCreate); var buffers = new byte[1024];// 创建一个8k的缓存区 var list = new List<byte>(); while(true) { int length = program.Read(buffers, 0, buffers.Length); if(length <=0) { break; } list.AddRange

技术债! 怎样简洁高效的实现多个 Enum 自由转换

╄→гoц情女王★ 提交于 2020-10-24 14:39:49
一:背景 1. 讲故事 前段时间和同事负责一个项目的两个业务模块,可能大家缺少沟通,导致本该定义一个 Enum 的地方结果我俩各自定义了一个,导致后面这两个 Enum 进行对接就烦了,为了方便理解,也不想让大家看这崴脚的英文拼写,我就拿 银行 举例吧。 A同事 定义的枚举 public enum BankEnum { ICBC = 1, CMSB = 2, CMBC = 3 } B同事 定义的枚举 public enum ChinaBankEnum { 中国民生银行 = 1, 中国工商银行 = 2, 中国招商银行 = 3, } 这就很尬尴了,怎么将 ChinaBankEnum 转成 BankEnum 呢?为了寻求多快好省,本篇就聊聊这个问题。 二:寻找解决办法 1. 手工匹配 本质上就是找两个 Enum 的 mapping 关系,人肉匹配那是最简单粗暴的,代码如下: static BankEnum ConvertToEnum(ChinaBankEnum chinaBank) { switch (chinaBank) { case ChinaBankEnum.中国工商银行: return BankEnum.ICBC; case ChinaBankEnum.中国民生银行: return BankEnum.CMSB; case ChinaBankEnum.中国招商银行: return

《Entity Framework 实用精要》

纵饮孤独 提交于 2020-10-09 05:10:07
《Entity Framework 实用精要》 ========== ========== ========== [作者] (中) 吕高旭 [出版] 清华大学出版社 [版次] 2018年01月 第1版 [印次] 2018年01月 第1次 印刷 [定价] 79.00元 ========== ========== ========== 【第01章】 (P011) 在 Entity Framework 的环境下,应用程序与实体数据模型进行沟通,避免与连接的数据库结构产生耦合,这对于大型应用程序的分层设计相当重要。 (P013) 简单地说, ORM 是将数据库的数据库表等内容映射到自动创建的数据模型类。 (P031) Code First 大幅简化了 Entity Framework 架构,通过自定义的类文件即可完成数据对象的映像与底层数据存取的工作,不再需要 EDM 相关文件,对于大型的在线开发特别有利。 (P033) Code First 模式与 Model First 模式相比,除了比较有弹性外,同时也不需要相关的 T4 模板文件,可以让我们进一步精简项目的内容,这也是实际开发中建议采用的方式。 【第02章】 (P044) 每一个实体数据模型都会建立 DbContext 类以供应用程序进行数据库连接,并且根据数据库中的数据库表结构逐一创建对应的 DbSet 类

深入理解 EF Core:使用查询过滤器实现数据软删除

浪尽此生 提交于 2020-10-03 04:01:17
原文: https://bit.ly/2Cy3J5f 作者:Jon P Smith 翻译:王亮 声明:我翻译技术文章不是逐句翻译的,而是根据我自己的理解来表述的。其中可能会去除一些本人实在不知道如何组织但又不影响理解的句子。 这篇文章是关于如何使用 EF Core 实现软删除的,即表面上删除了数据,但数据并没有被物理删除,在需要的时候你还是可以把它读取出来的。软删除有很多好处,但也有一些值得注意的问题。这篇文章会教你使用 EF Core 实现一般的软删除和复杂的级联软删除。在此过程中,我还会介绍如何编写可重用代码来提高软删除解决方案的开发效率。 我假设你对 EF Core 已经有了一定的认识。但在真正讲软删除实现的方案之前,我们先来了解一下如何使用 EF Core 实现删除和软删除的一些基本知识。 本文是“深入理解 EF Core”系列中的第三篇。以下是本系列文章列表: 深入理解 EF Core:当 EF Core 从数据库读取数据时发生了什么? 深入理解 EF Core:当 EF Core 写入数据到数据库时发生了什么? 深入理解 EF Core:使用查询过滤器实现数据软删除(本文) 概要 ∮. 你可以使用全局查询过滤器(现在称为查询过滤器)为你的 EF Core 应用程序添加软删除功能。 ∮. 在应用程序中使用软删除的主要好处是可以恢复无意的删除和保留历史记录。 ∮.

如何在实体框架中获取插入实体的ID? [关闭]

被刻印的时光 ゝ 提交于 2020-10-02 11:15:39
问题: Closed . 已关闭 。 This question needs to be more focused . 这个问题需要更加 集中 。 It is not currently accepting answers. 它当前不接受答案。 Want to improve this question? 想改善这个问题吗? Update the question so it focuses on one problem only by editing this post . 更新问题,使其仅通过 编辑此帖子 来关注一个问题。 Closed last year . 去年 关闭。 I have a problem with Entity Framework in Asp.net. 我在Asp.net中遇到实体框架问题。 I want to get the Id value whenever I add an object to database. 每当将对象添加到数据库时,我都想获取Id值。 How can I do this? 我怎样才能做到这一点? 解决方案: 参考一: https://stackoom.com/question/Ls4d/如何在实体框架中获取插入实体的ID-关闭 参考二: https://oldbug.net/q/Ls4d/How-can-I-get-Id-of

ASP.NET Core 2.0 MVC项目实战

一个人想着一个人 提交于 2020-09-28 13:50:17
一、前言 毕业后入职现在的公司快有一个月了,公司主要的产品用的是C/S架构,再加上自己现在还在学习维护很老的delphi项目,还是有很多不情愿的。之前实习时主要是做.NET的B/S架构的项目,主要还是用的那种传统的开发模式,只有一个项目用到了Web API,自己负责后端的接口功能实现。既然现在没办法改变现状,那就先改变自己吧。定了个计划,下班后慢慢的开始学习ASP.NET Core Web API和Vue,准备从前端到后端自己写一个小项目玩玩,毕竟代码这个东西,时间长了是会忘的。 嗯,有点扯远了。这个MVC项目是我的毕业设计,虽然写的比较烂,而且当时为了赶紧写完,代码的冗余程度有点高,但还是希望能给一些准备入门ASP.NET Core MVC的童鞋提供些借鉴吧。代码我放到Github上了,源码地址 https://github.com/Lanesra712/Danvic.PSU ,欢迎大神们拍砖,指出不足处。 二、项目介绍 毕业论文的课题是一个大学生的一个报名系统,主要是为了完成大学生报名过程中的一些数据维护,当然最后因为实在来不及了,好多都没做。。。项目主要使用到的相关技术如下所示: 项目框架:ASP.NET Core 2.0 MVC ORM:Entity Framework Core(使用Code First) 数据库引擎:MySQL SERVER 5.7 权限验证

.NET 程序员的 Playground :LINQPad

送分小仙女□ 提交于 2020-08-19 23:28:42
如果想执行一个简单的 C# 语句并获得运行结果,通常我们需要做几个步骤才能达成: 打开 Visual Studio 并新建一个控制台项目。 在 Program.cs 中编写代码并保存。 点击运行按钮或者 F5 运行程序并查看结果。 通常来说这并不会产生问题。但如果你和笔者一样为 Visual Studio 安装了各种插件,那么 Visual Studio 的启动时间就会变得很长。在新建项目时,我们必须为这些临时的代码指定名称和保存路径,如果保持默认的名字,就很可能在今后忘记建立这些文件的用途。 使用 LINQPad 可以解决上面的问题。LINQPad 的软件包很小只有二十兆左右,启动速度很快。使用时只需输入想要执行的 C# 语句,并按下 F5 即可: 快捷键 F4 可以打开“查询属性”窗口,在这个窗口中,你可以引用所有在运行时需要的东西,包括:dll、配置文件、json和文本文件等,这些引用的文件将会被复制到输出目录。 同时,LINQPad 也支持直接将 NuGet 包引用到查询中: 也可以将查询保存为一个扩展名为 .linq 的文件,以便复用代码。 语言支持 包括“C# 表达式(C# Expression)”在内,LINQPad 一共支持 4 种语言和 10 种查询类型: C# Expression C# Statement(s) C# Program VB Expression

为什么我说 ETL 是 SQL 人重启辉煌之光的必经之路

风流意气都作罢 提交于 2020-08-19 19:03:35
点击蓝色“ 有关SQL ”关注我哟 加个“ 星标 ”,天天与10000人一起快乐成长 很多朋友会觉得写 CRUD 很无聊,翻来覆去就那么点花样。接触不到新鲜的技术,感觉自己要被这个时代淘汰了。于是怨天尤人,连基本的 SQL 都写不好了。 这可能是眼界与见识的问题。SQL 在行业内还是相当重要的,当然你说 CRUD 那点东西玩几个月就会了,没有新奇感。从技术角度来看,是这样,我承认。但换成业务角度来说,这又不是一回事了。这要细讲,我可以讲上三天三夜,所以留到以后的文章再说。 在 OLTP 系统中,CRUD 能做的事情,越来越少了。大部分都由前端框架封装好了。搞c#的同学有 Entity Framework, Java 系的同学有 Spring 全家桶。这些框架可以说,基本把 CRUD 同学的职位给抢掉了 2/3, 剩下纯搞 CRUD 的同学就偷着乐吧,也没几天了,想吃啥想喝啥,别委屈了自己。 真正能让 SQL 人凭手艺,还在 CRUD 行当里吃香的,喝辣的,技术上取决于你掌握了多少种数据库,SQL写得多快,要不然就是要享受福报了。 好在上帝关闭一扇窗的同时,他又打开了一道门。这道门便是 数据仓库 。 数据和银行的存款是一样的,越积越多,多得我们得千方百计思考该怎么用它。我们刚开始入行的时候,接触的数据库应用,十有八九都是业务系统,比如订单系统,生产系统和人事系统。这是早就很多

深入理解 EF Core:使用查询过滤器实现数据软删除

試著忘記壹切 提交于 2020-08-18 16:03:05
原文: https://bit.ly/2Cy3J5f 作者:Jon P Smith 翻译:王亮 声明:我翻译技术文章不是逐句翻译的,而是根据我自己的理解来表述的。其中可能会去除一些本人实在不知道如何组织但又不影响理解的句子。 这篇文章是关于如何使用 EF Core 实现软删除的,即表面上删除了数据,但数据并没有被物理删除,在需要的时候你还是可以把它读取出来的。软删除有很多好处,但也有一些值得注意的问题。这篇文章会教你使用 EF Core 实现一般的软删除和复杂的级联软删除。在此过程中,我还会介绍如何编写可重用代码来提高软删除解决方案的开发效率。 我假设你对 EF Core 已经有了一定的认识。但在真正讲软删除实现的方案之前,我们先来了解一下如何使用 EF Core 实现删除和软删除的一些基本知识。 本文是“深入理解 EF Core”系列中的第三篇。以下是本系列文章列表: 深入理解 EF Core:当 EF Core 从数据库读取数据时发生了什么? 深入理解 EF Core:当 EF Core 写入数据到数据库时发生了什么? 深入理解 EF Core:使用查询过滤器实现数据软删除(本文) 概要 ∮. 你可以使用全局查询过滤器(现在称为查询过滤器)为你的 EF Core 应用程序添加软删除功能。 ∮. 在应用程序中使用软删除的主要好处是可以恢复无意的删除和保留历史记录。 ∮.