IQueryable的复用 IQueryable是一个待查询的逻辑,因此它是可以被重复使用的 IQueryable books = ctx.Books.Where(b => b.Price...执行实体相关查询原生SQL语句 如果要执行的原生SQL是一个查询语句,并且查询的结果也能对应一个实体,就可以调用对应实体的DbSet的FromSqlInterpolated()方法来执行一个查询SQL...只能单表查询,不能使用Join语句进行关联查询。但是可以在查询后面使用Include()来进行关联数据的获取。...) 更新到数据库; “已删除”的实体,SaveChanges() 从数据库删除; 查看实体的状态: 使用DbContext的Entry()方法来获得实体在EF Core中的跟踪信息对象EntityEntry...DbContext会根据跟踪的实体的状态,在SaveChanges()的时候,根据实体状态的不同,生成Update、Delete、Insert等SQL语句,来把内存中实体的变化更新到数据库中。
LINQ to SQL可以将查询表达式转换为SQL语句,然后在数据库中执行。相比LINQ to Object,则是将查询表达式直接转化为Enumerable的一系列方法,最终在C#内部执行。...将查询表达式转换为SQL语句并不保证一定可以成功。 IQueryable 理解IQueryable的最简单方式就是,把它看作一个查询,在执行的时候,将会生成结果序列。...在LINQ to SQL中lambda表达式首先被转化为表达式树,然后再转换为SQL语句。 我们试图实现一个可以将where这个lambda表达式翻译为SQL语句的查询提供器。...拥有连接数据库,简单执行sql语句(不需要返回值,用于DDL或delete语句)和通过执行Sql语句,返回若干实体的功能(用于select语句)。...首先IQueryable是解析一棵树,IEnumerable则是使用委托。前者的手动实现上面已经讲解了(最基本的情况),而后者你完全可以用泛型委托来实现。
--由于PDF.NET框架是在实际商业产品中的应用,所以维护一直在进行,功能扩展和Bug修复一直在进行中; (3)ORM的框架众多,lz的产品优势在哪里?定位简单还是功能强大?...--框架的主要特点是具有iBatis的SQL-MAP功能和支持.NET 2.0的面向对象方式的查询表达式OQL,定位是简单易用,在使用 SQL-MAP的时候,只需要写好SQL语句,有代码工具自动生成DAL...--框架提供了从数据库来生成实体类的工具,但也允许你先ModelFirst、CodeFirst,我的许多示例(比如示例操作OQL的部分)都是直接创建实体类, 没有设计数据表的,如果采用手工方式,你可以自定义要持久化哪些属性以及如何持久化...不太认同你说的“不是设计者”就无法肯定框架是“轻量、简单”的这个观点,“轻量”可以从软件的文件大小、对环境、系统的依赖程度等方面来认定; “简单”可以从实际使用过程体会出来,已经有不少用过或者看过框架的朋友肯定的说...比如自定义函数和SQL类型等等 --PDF.NET的实体类本着从简的原则,实体类没有引入复杂关系的概念,遇到这些复杂的查询,可以使用SQL-MAP功能,它可以将DataReader的结果读入实体类中;
10.除了EF,列举出你知道的ORM框架? 11.在哪些类型额项目中你会选择EF? 为什么? 12.请说明EF中映射实体对象的几种状态? 1.EF(Entity Framework)是什么?...提升从数据库中拿数据的速度,可以参考以下几种方法: 1).在数据库中的表中定义合适的索引和键 2).只获得你需要的列(使用ViewModel或者改进查询)和行(使用IQueryable)...大部分LINQ语句是在最终结果的第一个元素被访问的时候(即在foreach中调用MoveNext方法)才真正开始运算的,这个特点称为延迟执行。...LINQ to SQL可以将查询表达式转换为SQL语句,然后在数据库中执行。相比LINQ to Object,则是将查询表达式直接转化为Enumerable的一系列方法,最终在C#内部执行。...将查询表达式转换为SQL语句并不保证一定可以成功。 10.除了EF,列举出你知道的ORM框架?
开源地址:https://github.com/NewLifeX/X (求star, 729+) 什么是脏数据 在XCode中,每次执行实体类更新entity.Update时,都希望只更新修改过的字段,...一方面,减少数据库压力以及通信流量; 另一方面,多线程同时更新同一行数据的不同字段,在未加锁的情况下,避免脏写。 ? IsDirty和Dirtys,这是XCode的脏数据,常常出现在Valid中 。...脏数据是生成Update语句的核心,不脏的字段不会出现在update set 之中,从而实现部分字段更新。...最终生成的update set语句,只包含带有脏数据的字段。最后的where部分,则由主键组成。 使用脏数据 脏数据最常见于数据验证Valid中,可以用来判断某个属性否则曾经被修改过 ?...除了可用于实体类Valid,还可以用于实体过滤器EntityModule.Valid。
,可以使用以下方法: Format with object arguments 带有对象参数的格式 Format with object[] argument 使用object []参数格式化 Something...’s offload all cases into this data structure: 由于我们只有3个条件,因此可以使用if来处理它们,但是由于我们假设将来需要扩展此方法,因此让我们将所有情况转移到此数据结构中...使用FilterPredicate,我们可以确定要处理的三种情况中的哪一种。...请注意转换在IQueryable 中具有IQueryable方法的qu.Provider.CreateQuery(result) 。 它广泛用于C#(请看IEnumerable 接口!)...,它来自使用一个要获取IQueryable / IEnumerable的类处理所有通用接口并使用通用接口方法进行处理的需要。
前言 EF Core是我们.NET日常开发中比较常用的ORM框架,今天大姚要分享的内容是如何使用EF Core Generic Repository通用仓储库来快速实现EF Core数据仓储模式。...通过使用这个库,开发人员可以更轻松地管理数据访问层,提高开发效率。 值得推荐的.NET ORM框架 对于还不知道怎么选择.NET ORM框架的同学可以看下面这两篇文章,希望对你会有所帮助。...16个值得推荐的.NET ORM框架 .NET ORM框架使用情况统计 数据仓储(Repository)介绍 Repository(仓储)是DDD(领域驱动设计)中的经典思想,可以归纳为介于实际业务层(...提供了带有数据库事务支持的通用存储库。 拥有所有必需的方法,以任何你想要的方式查询数据,而无需从存储库获取IQueryable。...支持选择是否要跟踪你的查询实体/实体。 支持在确实需要时重置你的EF Core DbContext状态。 具有完整的单元测试支持。 支持分页、原始SQL查询支持复杂类型和原始类型。
之前我一直以为VS只负责将LINQ的表达式翻译成等价的扩展方法调用,后来发现VS为了满足我们在前期无法确定对象条件的情况下进行Where字句的拼接,允许我们在编写LINQ语句的时候带有逻辑判断表达式在里面...,这个功能对我们进行多条件组合查询时相当方便,不需要在进行IF、ELSE的多个判断,只需要顺其自然的在LINQ中的第一个表达式中进行判断就行了。...由此可以得出一个结论,LINQ语句是会被执行和解析的两个动作,在还没有进入到提供程序时已经可以看出LINQ是可以附带一些执行逻辑在里面的,而不是最终的SQL执行逻辑。...表达式的处理可以分为常量表达式和动态变量表达式,常量表达式在VS编译的时候就可以直接计算表达式是否是true、false。...所有说如果多条件组合查询之间是and关系可以直接使用Linq,如果是or或者是or与and一起,那么可以使用上面这种链式查询方法。
这样设计的好处在于我们可以针对概念模型进行所有数据操作而不必关系数据的存储关系,使我们可以更加自然的采用面向对象的方式进行面向数据的应用程序开发。...Code First 简单使用演示 第一步:还是添加一个控制台应用程序,然后在此项目中添加两个简单的实体类 using System; using System.Collections.Generic;...因此接下来我们需要给这个应用安装EntityFramework包,因为到目前为止我们并没有引入EF框架相关的任何内容,我们需要引入EF相关程序集。但是我们有更好的选择那就是NuGet。...我们可以在App的配置文件里添加一个数据库的链接字符串 <?xml version="1.0" encoding="utf-8"?...同时打开Sql Server 发现也有了刚刚在配置文件中配置的那个数据库
我们的工程都是用基本的功能创建的。现在,我们开始创建数据库上下文类,这个类将会被Data Access实体框架使用。...如果完成了包的安装,你将会在工程中看到以下引用界面: ? 配置数据库的连接字符串 在写控制器代码之前,我们需要为实体框架配置连接字符串,以便在操作数据库时来连接数据库。...在配置文件中,你会发现下面配置节点中的连接字符串,你需要在节点中根据你的系统来修改连接字符串。...我们正在获取 Assets 的引用,以便能够链接到实体框架请求数据,我们可以通过 Count()函数来获取数据集表的数据数目,这个数据将会传递到 DataTablesResponse 构造函数中,成为行为方法的最后一行...现在 build 这个工程并在浏览中运行,就可以查看带有服务器端过滤、分页和排序的 GridView 了。
所以在使用ORM时,如果它用到了IQueryable,请将你的查询也写成表达式而不是委托的形式。...在代码中,选择了前100个score(一条SQL),然后对所有score进行遍历,从表Student中获得Name的值(100条SQL)。 解决方法也在文章中给出了,就是将两个表连到一起。...只获得你需要的列(使用ViewModel或者改进你的查询)和行(使用IQueryable) 尽可能使用一条查询而不是多条 只为了展示数据,而不进行后续修改时,可以使用AsNoTracking。...在EF6中,我们还可以使用这样的方法: ? 注意:编译器不一定能够将你的LINQ语句翻译为SQL,例如字符串的IndexOf方法就不被支持。...你可以通过在IEnumerable上调用AsQueryExpr方法来令LinqOptimizer优化你的LINQ语句。使用Run方法执行: ?
正如我们大家一直讨论的那样,在EF中,DBContext它本身就已经是一个Unit Of Work的模式,因为上面说的功能它都有。那我们有必要自己再给它包上一层吗?...我们要做的并不多,因为DbContext.SaveChanges它本身就是有事务的,所以我们只需要创建一个带有SaveChanges的接口就可以了。...那IRepository中的那些更新类方法放在领域层是不是就多余了呢? 毕竟我们现在只需要用到查询的功能。我们可以单独建一个IQuery的接口给领域层使用。...(Mock)以便我们在测试中使用 如果你的项目属于短期的项目,或者说你不用考虑更换数据访问层,那么你就可以忽略第一和第二个优点。...而第三个优点,借助于一些测试框架我们也可以实现,所以如果你不想用Repository,那就不用,前提条件是你所做的项目允许你这样做,并且你也能够找到好的替代方案来弥补Repository的优势。
不要为了显示而使用存储库 工作单元 持久化中的困难 总结 概述 在上一篇文章中,我们已经了解过领域驱动设计中一个很核心的对象-聚合。...它不能为实体服务吗?...通过返回一个IQueryable对象,甚至可以将业务查询逻辑直接放到应用层,这样想怎么操作就怎么操作。 请注意!!!这非常的危险!!!! 您可能会问了:“我平时所接触的框架或者仓储不都是这样写的吗?...在EFCore中,为我们提供了Fluent API的方式来配置模型,该方式可以很好的让领域对象保持干净。假如您没有使用EFCore,另外的ORM框架也一定会为您提供类似于这样的配置方法。...不要为了显示而使用存储库 很多场景我们可能需要提供一个丰富的界面,或者一个完整的报表。比如在一个界面上显示了某个聚合中的一个实体的信息,又或者在报表中提供了各个实体和值对象的汇总和特定信息。
延迟执行 IQueryable query = from c in North.Customers select c; 这样的查询句法不会导致语句立即执行,它仅仅是一个描述,对应一个SQL。...仅仅在需要使用的时候才会执行语句.比如: IQueryable query = from c in North.Customers select c; foreach...对于这样的需求,建议你先使用ToList()等方法把查询结果先进行保存,然后再对集合进行查询: IEnumerable customers = (from...由于这个特性,我们在使用存储过程作为实体更新方法的时候就要当心了,存储过程书写错误,即使你提交了修改也很可能导致缓存中的数据和数据库中的数据不一致,引起不必要的麻烦。...由于新的DataContext中还没有获取实体,我们只能通过附加方式更新数据。 首先把Customer表的主键字段加上IsVersion标识: ?
当然,在某种程度上,这也的确是仓储所带来的利好。仓储的要点是保持你的领域模型和技术持久化框架的独立性,这样你的领域模型可以隔离来自底层持久化技术的影响。...换句话说,ORM负责将代码中定义的对象和关系映射到数据库的表结构中去,并在进行数据访问时再将表数据映射到代码中定义的对象,借助ORM我们不需要去手动写SQL语句就可以完成数据的增删改查。...ORM不是仓储,但是仓储可以使用ORM来持久化领域对象的状态。 ? 如果你的领域模型与你的数据模型类似,ORM可以直接映射领域模型到数据存储,否则,则需要对ORM进行额外的映射配置。 4....比如,在实体中我们一般使用IsActive或IsDeleted属性来表示软删除,而一旦实体中的某条数据被删除,那么UI中基本不会再显示这条数据,那对于实体的查询都需要包含类似Where(c=> c.IsActive...对于没有复杂业务逻辑的简单限界上下文,直接使用持久化框架即可。 使用UOW进行事务管理。UOW负责跟踪对象的状态,仓储在UOW协调的事务中进行实际的持久化工作。
我更觉得这些文章属于使用类的,在实际项目中用到的时候稍微的查一下能用起来就行了,而重要的是能搞懂其原理才是我们长期所追求的,因为这些原理在任何一个应用框架的设计中都是相通的,可以帮助我们举一反三的学习,...如果我们使用扩展方法那么只能是扩展IEnumerable对象,这没有问题。我们可以很方便的在LINQ的表达式中调用我们自己的扩展方法,让自己的方法跟着一起链式查询。...顺便在扩展点使用思路,在目前MVVM模式中其实也可以将V中的很多界面逻辑封装在扩展方法中来减少VM中的耦合度和复杂度。包括现在的MVC都可以适当的采用扩展方法来达到更为便利的使用模式。...我们在编写Linq语句的时候一般都是 where什么然后select 什么,至少连续两个扩展方法的映射调用,但是朋友你知道它内部是如何处理的吗?...IQueryable继承自IEnumerable接口,也就是可以被foreach语法调用的,但是在GetEnumerator方法中才会去执行提供程序的代码。
4、EF中的一些类的命名空间以及一些方法的名字在EF Core中稍有不同。 5、EF不再做新特性增加。...程序包管理器控制台”中执行命令:Add-Migration InitialCreate,会自动在项目的Migrations文件夹中中生成操作数据库的C#代码。...OutputDir”参数的形式来在同一个项目中为不同的数据库生成不同的迁移脚本 小结: 1、使用迁移脚本,可以对当前连接的数据库执行编号更高的迁移,这个操作叫做“向上迁移”(Up),也可以执行把数据库回退到旧的迁移...Data Annotation配置方式 把配置以特性(Annotation)的形式标注在实体类中 [Table("t_books")] public class Book { public...总结:如果有一个确定的字段要被进行并发控制,那么使用IsConcurrencyToken()把这个字段设置为并发令牌即可;如果无法确定一个唯一的并发令牌列,那么就可以引入一个额外的属性设置为并发令牌,并且在每次更新数据的时候
** IEntityPersistence在XCode内部有一个默认实现,用户可以自定义后注册到对象容器ObjectContainer中。...Insert 生成标准Insert Into语句,根据设置决定是否使用参数化。(参数化设置) ?...Update 最精彩的部分,莫过于脏数据(后面将有专门文章介绍)。 在XCode中,修改数据的标准流程是,先查出来,修改属性后保存。此时生成的update set语句,只包含修改过的字段。 ?...最终生成的update set语句,只包含带有脏数据的字段。最后的where部分,则由主键组成。 Delete 就简单多了,只取了其中的主键字段,拼接where部分。 ?...脏数据是生成Update语句的核心,不脏的字段不会出现在update set 之中,实现部分字段更新,后续有专门章节讲解。
文章目录 前言 一、使用控制台手搭webapi框架 1.配置文件 2.控制台配置 二、EFCore框架DBSet配置详解 1.实体统一配置 2.实体继承统一接口 3.获取程序集所有类 4.批量注入模型类到...EF中 三、EFCore框架表配置详解 1.配置基类, 2.实体表统一配置 3.DBContext中应用配置 四、仓储配置 1.仓储基类 2.仓储实现类 五、Autofac配置 1.注入DBContext...本文涉及的知识量巨大主要有如下: EFCore Autofac Serilog Swagger 非常多底层知识 一、使用控制台手搭webapi框架 1.配置文件 appsettings.Development.json...EF实体,接口可以设置一个泛型,来泛化我们的主键类型,因为可能存在不同的表的主键类型也不一样。...DBContext中作为DBSets,再也不需要一个个写DBSet了,可以用过DbContext.Set()获取用户的DBSet。
如果是你,你会把 Svelte 用到大型公开项目中吗? 以下是这篇“吐槽”原文,由 InfoQ 翻译。 过去一个月来,我开发了一款个人 RSS 阅读器。...Svelte 承认用户可能需要向树结构的上方发送数据,并提供一个使用 Web 平台原语的 API。我必须给它点个赞! 响应式语句 我发现 Svelte 的响应式语句有点让人摸不着头脑。...保留在核心中倒不是坏事,只是很遗憾文档中那种优雅的用例根本就没法稳定实现。...Svelte 提供一种优雅的方式,可以在带有 标签的组件中使用CSS。那么,为什么不在CSS中实现过渡和动画? 也许我只是没有找到真正能用上这些API的用例,确实。...但在找到合适的用例之前,我两袖清风是要质疑为什么非得把这些复杂的API塞进Svelte核心。 总结 好了,这就是我结合实际使用整理的 Svelte 体会!
领取专属 10元无门槛券
手把手带您无忧上云