fluent

深入理解 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 应用程序添加软删除功能。 ∮. 在应用程序中使用软删除的主要好处是可以恢复无意的删除和保留历史记录。 ∮.

在.NET Core中使用MongoDB明细教程(3):Skip, Sort, Limit, Projections

守給你的承諾、 提交于 2020-09-30 17:25:17
到目前为止,我们已经讨论了创建文档, 检索文档,现在让我们来研究一下文档排序,指定要跳过或限制返回的文档数量,以及如何进行投影。此篇文章中的实例代码摘录自原文,未像前几篇文章一样进行实际代码的验证。 作者:依乐祝 译文地址:https://www.cnblogs.com/yilezhu/p/13525942.html 英文地址:https://www.codementor.io/@pmbanugo/working-with-mongodb-in-net-part-3-skip-sort-limit-and-projections-oqfwncyka Limit 当我们查询一个文档时,我们有时不想返回所有符合过滤条件的文档,而只返回其中的一部分。这就是 limit 方法的具体应用。对于MongoDB,可以通过调用 Find 返回的 IFindFluent 的 limit 方法来限制文档的数量。因此,如果我查询数据库中年龄小于40岁的学生,我会得到以下信息: S/N: 1 Id: 582489339798f091295b9094, FirstName: Gregor, LastName: Felix S/N: 2 Id: 582489339798f091295b9095, FirstName: Machiko, LastName: Elkberg S/N: 3 Id:

FreeSql (三十四)CodeFirst 迁移说明

江枫思渺然 提交于 2020-08-20 08:10:32
FreeSql 支持 CodeFirst 迁移结构至数据库,这应该是(O/RM)必须标配的一个功能。 与其他(O/RM)不同FreeSql支持更多的数据库特性,而不只是支持基础的数据类型,这既是优点也是缺点,优点是充分利用数据库特性辅助开发,缺点是切换数据库变得困难。不同程序员的理念可能不太一致,FreeSql尽量把功能支持到极致,至于是否使用是项目组技术衡量的另一个问题。 尽管多种数据库适配逻辑非常复杂,FreeSql始终秉承优化程序开发习惯的原则尽量去实现,中间碰到了一些非技术无法攻克的难题,比如数据库的自定义类型,和实体类本身就是一种冲突,为了减少使用成本,诸如此类的数据库功能没有得到支持。 static IFreeSql fsql = new FreeSql.FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10") .UseAutoSyncStructure(true) //自动同步实体结构【开发环境必备】 .Build(); //请务必定义成

FreeSql (三十四)CodeFirst 迁移说明

我只是一个虾纸丫 提交于 2020-08-20 02:08:14
FreeSql 支持 CodeFirst 迁移结构至数据库,这应该是(O/RM)必须标配的一个功能。 与其他(O/RM)不同FreeSql支持更多的数据库特性,而不只是支持基础的数据类型,这既是优点也是缺点,优点是充分利用数据库特性辅助开发,缺点是切换数据库变得困难。不同程序员的理念可能不太一致,FreeSql尽量把功能支持到极致,至于是否使用是项目组技术衡量的另一个问题。 尽管多种数据库适配逻辑非常复杂,FreeSql始终秉承优化程序开发习惯的原则尽量去实现,中间碰到了一些非技术无法攻克的难题,比如数据库的自定义类型,和实体类本身就是一种冲突,为了减少使用成本,诸如此类的数据库功能没有得到支持。 static IFreeSql fsql = new FreeSql.FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10") .UseAutoSyncStructure(true) //自动同步实体结构【开发环境必备】 .Build(); //请务必定义成

深入理解 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 应用程序添加软删除功能。 ∮. 在应用程序中使用软删除的主要好处是可以恢复无意的删除和保留历史记录。 ∮.

C# 数据操作系列

只谈情不闲聊 提交于 2020-08-18 06:17:44
原文: C# 数据操作系列 - 6 EF Core 配置映射关系 0. 前言 在《C# 数据操作系列 - 5. EF Core 入门》篇中,我们简单的通过两个类演示了一下EF增删改查等功能。细心的小伙伴可能看了生成的DDL SQL 语句,在里面发现了些端倪。没看的小伙伴也不急,这就贴出来。 public class ModelA { public int Id { get; set ; } public string Name { get; set ; } public List<ModelB> ModelBs { get; } = new List<ModelB>(); } public class ModelB { public int Id { get; set ; } public string Name { get; set ; } public int ModelAId { get; set ; } public ModelA modelA { get; set ; } } DDL SQL: CREATE TABLE "ModelBs" ( "Id" INTEGER NOT NULL CONSTRAINT "PK_ModelBs" PRIMARY KEY AUTOINCREMENT, "Name" TEXT NULL , "ModelAId" INTEGER NOT

EntityFramework Core 迁移忽略主外键关系

﹥>﹥吖頭↗ 提交于 2020-08-17 04:52:34
前言 本文来源于一位公众号童鞋私信我的问题,在我若加思索后给出了其中一种方案,在此之前我也思考过这个问题,借此机会我稍微看了下,目前能够想到的也只是本文所述方案。 为何要忽略主外键关系 我们不仅疑惑为何要忽略主外键关系呢?不难想到,相对于大型企业而言大部分都会采用不建立主外键关系(简称,外键约束),外键约束毫无疑问维护了数据一致性,但对其进行操作时很容易造成问题,级联删除只是其一。如果对于经常需要操作的表建立了外键约束,那么会严重影响插入、删除和更新的性能,因为在执行这些操作之前,数据库需要检查其是否违反数据完整性,这也就是为何大多数不管是DBA或者架构师完全放弃使用外键约束的原因,在分析数据库,它们并不能以事务方式(一次一行)来处理数据,而是批量处理,性能是一切,这是其二。随着业务需求变化在设计 数据库时,可能需要存储历史数据库中的旧数据,而这些旧数据可能对数据质量和完整性没有严格要求。 为了能够容纳旧的脏数据,可直接清理和转换旧数据,而放弃在数据库级别上强制执行参照完整性,这是其三。所以基于以上几点理由,忽略外键约束是有其原因所在,当然,是否放弃外键约束,可能取决于架构师或者DBA,反正决策权不在于搬砖的我们,我们知道其原因就好。 示例程序 以下示例皆在控制台中进行,老规矩,我们先给出示例模型,依然是Blog和Post两个实体,如下: public class Blog {

Java 8 新特性

孤街醉人 提交于 2020-08-14 06:08:04
Java 8 新特性 1.写在前面 自学Java已经快要一年了,一直用的都是Java8,在虎牙实习参与的项目中,大量地使用到了Java8的新特性:Lambda表达式和Stream流式计算,它们脱离了数据库层面的运算,直接在内存中对数据做过滤、统计等操作,给应用程序的效率带来了极大的提升。今天趁着需求写完了的空闲时间,来学习并总结一下Java 8的新特性。 2.Lambda 表达式 Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。 Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。 使用 Lambda 表达式可以使代码变的更加简洁紧凑。 基本的语法格式为: ( parameters ) - > expression 或 ( parameters ) - > { statements ; } 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。 简单实例: // 1. 不需要参数,返回值为 5 ( ) - > 5 // 2. 接收一个参数(数字类型),返回其2倍的值 x - > 2 * x