由于在 09 年最初设计时,ORM 部分的设计并不是最重要的部分,那里 Rafy 的核心是产品线工程、模型驱动开发、界面生成等。...IQuery 作为描述查询的核心类型,被重命名为 IPropertyQuery,所有方法的参数也都直接面向 Rafy 实体的《托管属性》。但是在整体结构上,还是与原框架保持一致。...33: /// 一般使用在以下情况中:当引用属性定义在基类中,而当前正在对子类进行查询时。...Linq Query:为了给开发人员提供更易用的接口,需要提供 Linq 语法的支持。本层用于解析 Linq 表达式树,并生成最终的实体查询的对象。...可以使用最易用的 Linq、旧的 PropertyQuery,同时也可以直接使用 IQuery 接口来完成复杂查询。 组件详细设计 Sql 语法树 使用解释器模式设计,用于描述 Sql 查询语句。
他给的示例SQL如下: select HName,case when IsEnable=1 then '启用' else '停用' from tb_User OQL是SOD框架的ORM查询语言,它类似Linq...这个问题已经不止这一个朋友来问我了,我想了下,还是把这个问题的解决写一篇博客,给大家一种新的解决方案。 注意“新的方案”这个提法,我是不打算让OQL支持CASE WHEN这个特性的,为何要这样做呢?...OQL只解决 80%的普通查询,其它复杂的查询,应该依托于其它技术,否则会增加OQL的复杂性; 复杂的查询,可以借助于SOD框架的SQL-MAP技术,将SQL语句写在SqlMap.config文件中;...因此,在SOD框架上使用“计算属性”,有一个必须注意的原则:“计算属性”不可以出现在OQL语句中。...对应这种需求,我们通常想到的办法是写一个ViewModel来定制这个查询结果。
这些SQL写多了越写越烦,于是再度去围观ORM,发现它的确大大减轻了我写SQL的负担,除了那个令我心烦的Content内容字段也被查询出来的问题,不过我也学会了,单独建立一个实体类,影射文章表的时候,不映射...当时这个ORM查询API--OQL很简单,只能处理相等条件的查询,但是能够只选取实体类的部分属性,已经很好了,复杂点的查询,结合在XML中写SQL语句的方式解决,其它一些地方,通过数据控件,直接生成SQL...小结一下我做CRUD的历史,首先是对写SQL乐此不彼,还发明了在XML文件中配置SQL然后映射到程序的功能:SQL-MAP,然后觉得这样写SQL尽管方便管理编写查询且可以自动生成DAL代码,但是项目里面大量的...2,Linq2Sql&EF: 2008年,随着.NET 3.5和VS2008发布,MS的官方ORM框架Linq2Sql也一同发布了,它采用Linq语法来查询数据库,也就是说Linq是MS的ORM查询...2.2,表达式树 有关表达式树的问题,我摘引下别人文章中的段落,原文在《表达式即编译器》: 微软在.NET 3.5中引入了LINQ。
SQL的核心是对“关系”的操作,数据库理论研究证明,SQL是关系上完备的,但是当代大多数高级语言都是面向对象的,高级语言程序要跟关系数据库进行交互,SQL就成了必须的桥梁,由于SQL基于的“关系”和程序语言的...所以,ORM出现后,在一定程度上,它可以取代DAL,这使得你少了一个层的工作量,对于提高工作效率是很重要的。 下图是应用程序使用ORM和使用传统的DAL的一个示意图。 ?...三、ORM查询语言 1,分离关注点 那么,这些问题ORM能够解决吗?...ORM查询语言,其实早就有了,从早期的Hibernate的HQL,到MS的Linq(Linq2SQL,EF其实内部都是使用Linq生成的SQL),它们都可以生成复杂的SQL语句,它们都是直接作用于ORM...现在,我觉得LINQ也具有了这样的能力,而我框架中的OQL,也有这样的能力,所以我大胆的称呼它是一个“ORM Query Laguage”,就像SQL是提供给RDBMS的查询引擎使用一样,OQL是提供给
本文介绍如何使用 Rafy 框架中的 Sql Tree 查询: 除了开发者常用的 Linq 查询,Rafy 框架还提供了 Sql 语法树的方式来进行查询。...这隔离了与具体数据库的耦合,使得开发者编写的查询可以跨越多种不同的数据库运行,甚至可以在非关系型数据库中运行。...查询中使用的是实体类型(Chapter)和实体的托管属性(Chapter.NameProperty)来定义表和字段。 更多的查询语法示例,见本节后面的更多示例。...例如,Linq 查询中需要两个实体有确切的实体关系才会最终生成 Join 语句;但是 SqlTree 则与 Sql 语句无异,开发者可以随意将两个实体对应的表进行 Join 操作。...需要更好的性能。 SqlTree 查询是 Rafy 框架查询数据(表格、实体)的核心实现。在框架底层,Linq 查询也都是完全是基于 SqlTree 查询来实现的。
/ )的时候,考虑到架构的兼容性和将来升级的可能性,最重要的是没有足够的时间去为网站添加和维护很多复杂的程序,所以在借鉴前人成功经验的基础上,设计了 一套全新的快速数据处理框架 PWMIS Data development...本套框架的思想是借鉴Java平台的Hibernate 和 iBatis 而来,兼有ORM和SQL-MAP的特性,同时还参考了后来.NET的LINQ(本框架成型于2006年,当时还未听说过LINQ)使用风格...映射与查询; BLL层实体对象查询(OQL) DAL层SQL语句和.NET数据访问代码映射(查看 SQL-MAP 原理) 详细说来,框架还包含以下特色功能: 类似LINQ的支持ORM实体类查询的OQL表达式...本框架 OQL的基本设计在LINQ或者说本人知道 LINQ之前,另外,.NET3.5框架才正式支持LINQ,而我们公司的一个产品却因为采用了3.5框架安装部署不方便成为市场和客服常常抱怨的理由。...一套实用工具,可以生成实体类和根据SQL配置文件自动生成代码的代码生成器以及SQL配置文件管理程序。
那么为什么,我推荐使用配置类加载吗? 因为在实际开发中,一个完整的程序或者网站实体类都会大于10,而这些如果使用属性的形式会非常多,不利于实际开发。...3.花样查询 EF Core 支持Linq查询,所以在查询的时候可以使用Linq进行。...EF Core在调用 ToList的时候,会将已调用的方法和Linq转换成SQL语句,并正式向数据库发起查询。如果出现了在Linq中调用三方方法或者自己写的工具方法的话,可能会提示不受支持。...如果使用的Linq表达式,则没关系,EF Core在遇到这种情况的时候,会把数据库里所有数据都加载到上下文中,再执行后续的查询等操作。...待EF Core篇完成后,将带领一起去探索 Nhibernate和Dapper,SqlSugar这三个ORM框架。
名言警句 "理解IQueryable的最简单方式就是,把它看作一个查询,在执行的时候,将会生成结果序列。" - Jon Skeet LINQ to Object和LINQ to SQL有何区别?...LINQ to SQL可以将查询表达式转换为SQL语句,然后在数据库中执行。相比LINQ to Object,则是将查询表达式直接转化为Enumerable的一系列方法,最终在C#内部执行。...将查询表达式转换为SQL语句并不保证一定可以成功。 IQueryable 理解IQueryable的最简单方式就是,把它看作一个查询,在执行的时候,将会生成结果序列。...在LINQ to SQL中lambda表达式首先被转化为表达式树,然后再转换为SQL语句。 我们试图实现一个可以将where这个lambda表达式翻译为SQL语句的查询提供器。...我们要自己写一个简单的查询提供器,所以我们要写一个IQueryProvider,然后在构造函数中传入。我们再次新建一个类型,继承IQueryProvider,此时我们又需要实现四个方法。
在很多时候我们设计一个系统功能或者应用框架时,完全可以借助链式设计模式来优雅我们的开发方式,使编码起来很顺利很方便。...对象图中可以很清楚的看出各个对象中的属性和方法,在Student类中我们定义了几个基本的学生属性。...2】.LINQ框架的核心设计原理 2.1.托管语言之上的语言(LINQ查询表达式) 通过上面的例子我们应该基本了解了链式设计模式、链式查询方法的奥妙和用武之地。...LINQ是在.NET3.5版本中引入的,核心程序集也就是System.Core.dll,有两个命名空间是直接关系到LINQ的,分别是System.Linq(LINQ查询表达式直接对应的链式查询方法集)、...在使用IEnumerable和IQueryable之间的区别是什么?如何很好的理解这两者在LINQ的整个框架中的关系。
看到这里聪明的你也许要问了,上面的例子可以映射User之外的实体吗?答案是完全可以!...先看一个例子,我们假设系统中还存在一个实体类 Group,我们使用PDF.NET的OQL表达式写一个支持两个实体连接查询的语句: OQL q=OQL.From(user) .InnerJoin...那么完美,人家LINQ是近水楼台先得月,MS自家的苗子,可以依靠“编译器语法糖”来写出优美的LINQ程序,但我们的这个实现从原理上说非常轻巧,在众多非官方的ORM框架中,真正支持了实体类的多表连接查询!...有关OQL的多实体连接查询仅在PDF.NET框架V4.1以后版本支持,该功能作为框架的一项重要功能扩展,已经在商业项目中开始使用,感兴趣的朋友可以一起研究。...,PDF.NET的ORM框架中的实体对象查询语言--OQL,已经可以完成很复杂的查询了,包括多实体类关联查询。
ORM指的是面向对象的对象模型和关系型数据库的数据结构之间的互相转换。 (表实体跟表之间的相互转换) ORM框架有很多,EF框架是ORM框架的其中一种,是实现了ORM思想的框架。...功能也极大的提高开发和架构设计的效率. 3).EF跨数据支持的是ORM框架主要功能点之一,带来的是可以通过仅仅改变配置就可以做到跨数据库的能力 4.如何提高LINQ性能问题?...提升从数据库中拿数据的速度,可以参考以下几种方法: 1).在数据库中的表中定义合适的索引和键 2).只获得你需要的列(使用ViewModel或者改进查询)和行(使用IQueryable)...大部分LINQ语句是在最终结果的第一个元素被访问的时候(即在foreach中调用MoveNext方法)才真正开始运算的,这个特点称为延迟执行。...LINQ to SQL可以将查询表达式转换为SQL语句,然后在数据库中执行。相比LINQ to Object,则是将查询表达式直接转化为Enumerable的一系列方法,最终在C#内部执行。
如果在 EF OnModelCreating 中配置了实体外键映射,也就是 SQL Server 中的 ForeignKey,那么我们在添加实体的时候,主实体的主键值会自动映射到子实体的外键值,并且这个操作在一个...SaveChanges 中,但如果没有在 OnModelCreating 中进行外键映射配置,我们添加实体的时候,就不会自动映射外键值了,什么意思呢?...1、实体框架主键的类型约束问题 在我们搭建整个实体框架的过程中,我们一般都是抽象封装处理很多基础的增删改查、分页等常见的数据处理功能,如下所示。...不过一般在处理LINQ的时候,它的递归函数的处理和我们普通的做法有一些差异。...在实体框架界面层的查询中,我们也不在使用部分SQL的条件做法了,采用更加安全的基于DTO的LINQ表达式进行封装,最后传递给后台的也就是一个LINQ对象(非传统方式的实体LINQ,那样在分布式处理中会出错
本文详细介绍了Entity Framework 5(EF5)在C#中的使用方法,包括EF5的基本概念、与其他持久层框架的比较、基本语法和高级语法的使用,并通过实例讲解了如何在项目中集成和使用EF5。...作为微软提供的ORM(对象关系映射)框架,EF5在简化数据库操作、提高开发效率方面发挥了重要作用。本文还将深入探讨EF5的核心原理,通过内部代码展示其工作机制。...DbContext是EF的核心类,用于与数据库进行交互。查询与操作:EF5通过LINQ(Language Integrated Query)执行查询,并自动将结果映射到对象模型中。...OnModelCreating方法用于配置实体与数据库表之间的映射关系。2. 查询数据EF5使用LINQ进行数据查询,查询结果自动映射到对象模型中。...它的自动化迁移、强类型支持、与LINQ的集成,使得EF5成为处理复杂数据操作的理想选择。EF5的优势在于其简化的数据访问模式、强大的映射能力、以及对事务和复杂查询的支持。
那么在LINQ中来说,我们无法通过一个方法多次调用来产生我们想要的表达式树,一个Where查询表达式扩展方法可能不仅仅是被LINQ查询表达式所使用,还有可能被ORM的入口方法所使用,比如Update更新的时候就需要...在LINQ中的查询表达式与查询方法其实是一一对应的,扩展方法是纵向的概念,而LINQ查询表达式是横向的,其实两者属于对应关系。...详情可以参见本人的“NET深入解析LINQ框架(四:IQueryable、IQueryProvider接口详解)”一文; 3】.LINQ查询表达式和链式查询方法其实都是空壳子 LINQ的真正意图是在方便我们构建表达式树...这一节我将给出LINQ的核心的执行图,我们将很清楚的看见LINQ的最终表达式树的对象结构,它是如何构建一棵完整的树形结构的,IQueryable接口是怎么和IQueryProvider接口配合的,为什么...ORM一直是我们比较喜欢去写的框架,这里就使用自定义的IQueryable来查询相应的对象实体。首先我们需要继承IQueryable接口来让LINQ能查询我们自己的数据上下文。
,下面我们看一下示例及分析; 2.1.1】 接口的依赖倒置 传统的三层架构,在Facade中调用BLL的方法,BLL调用DAL方法,这难道不是违背了“单一职责”原则吗;一直我们都在强调“单一职责”设计原则...,为什么很多项目的每层之间都是直接使用下层的接口,特别是我们的核心DomainModel层中,本来就是很干净的纯业务处理,来一个什么数据访问的接口真的很不美; 图1: ?...,我们对实体的最直观的认识是一个很POCO的对象,但是如果你在设计的时候将数据访问的DTO都设计成接口是否是有点不必要,有两个情况下可以平衡这种需要,第一如果你的DTO不需要业务层传入数据层那么无所谓的...,用来模拟程序运行时的入口,可以当成是Application Layer中的Facade对象; 其实这里就能看出来我在2.1】小结中说的“单一职责”设计原则,我已经将数据访问代码在ReportAnalyse...,需要使用相关的IOC框架做支撑;我们看一下上面的代码很简洁,依赖IServiceReport接口,这个时候我们再回过头来对单元测试进行简单的修改来适应可以持续重构的代码; 为了使代码好测试点,我修改了一下
前言 -为什么需要扩展 Linq 方法 Linq 在 .net 中使用是比较多的,而微软开发的 linq 相关函数无法满足实际项目开发中的需求,我们需要自己来扩展一些方法。...c# 扩展方法 在 Asp.Net Core 开发中或者其他的后端开发中都会有一个需求(尤其对于中台或者后台管理),那就是展示数据列表;当然不是普普通通的数据列表展示,而是需要进行排序、分页、查询关键字来获取列表...甚至在有些时候需要三个同时处理来更精确的筛选数据,而对于 Asp.Net Core 来说,用的语言是 C#,是一门强类型语言,在许多时候具有很大便利性,但是正因为这种原因,在某些时候却不太方便使用,需要进行额外方式来进行处理...出来属性进行查询的,但是实际使用中,从前端传递过来的一般都是字符串 "Name",而在后端进行查询时,以目前方式是无法将属性的key写到where函数中,也就无法执行查询通过"Name"来过滤数据;如果通过...但是天无绝人之路,在 c#中拥有扩展方法、表达式目录树和反射,可以将上面的方式进行优化。
(PDF.NET内存数据库架构图) 架构说明 1,核心类 MemDB 一个存储所有实体类集合的集合,即Memory Data,应用程序要取数据,通过Get方法获取(T为实体类类型); 当获取数据的时候...5,数据持久化 整个内存数据库使用的数据都是PDF.NET的实体类,这里使用PDF.NET框架的“序列化”和“反序列化”功能,将内存数据写入磁盘上的pmdb文件,或者从文件加载数据到内存中。...6,用户应用程序 这里是使用“内存数据库”的数据的地方,可以使用多种方式来操作内存数据,比如直接使用Linq To Object来查询内存中的数据,或者使用PDF.NET的EntityQuery对象,实现内存数据库和...实际使用中,可以完全抛弃DBMS,使用Linq To Object已经足够了。 7,PDF.NET Entity Object 这是整个系统使用的实体数据了,它由相关的组件调用传递。...有关PDF.NET开发框架的详细内容,请看官网 http://www.pwmis.com/sqlmap 内存数据库目前已经投入生产使用,即将整合在PDF.NET框架的下一个版本中。
EF一般都是使用Linq表达式来编写查询,但Linq方式跟SQL在语法上还是有很大的差异,特别是Linq的左、右连接查询,跟SQL差异很大。...,OQL是可以进行其它平台移植的 .NET框架低版本支持:框架仅需.NET 2.0 支持,如果引入Linq方式,那么意味着框架需要.net 3.5及以上版本支持 简化条件调用:在Where方法中直接调用实体类的属性...五、OQL多实体关联查询 在SQL中多表查询的时候,表的关联查询分为内联 Inner Join,左连接Left Join,右连接 Right Join,OQL通过对实体类进行关联查询实现SQL类似的操作...先在OQL表达式的Select方法指定要查询的实体属性,然后在EntityContainer的Map方法内采用 GetItemValue 方法获取要查询的结果,查询的时候GetItemValue 方法参数可以为...如果是局部使用多实体类的查询结果,可以不用定义这个“ViewModel”,在 MapToList方法中,直接使用匿名类型,例如下面的例子: OQL q=OQL.From(entity1)
它解决了对象和关系型数据库之间的数据交互问题,ORM的作用是在关系型数据库和业务实体对象之间作一个映射,这样我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法...因此我们在为自己负责的项目选择合适的ORM框架的时候需要从项目的业务场景出发,选择最适合自己团队的ORM框架(注意没有完美的框架,适合团队的才是最好的)。...查询接口类似于 LINQ。您可以使用 Chloe.ORM 通过 lambda 查询 LINQ 之类的数据并执行任何操作(加入查询 | 组查询 | 聚合查询 | 插入 | 批量更新 | 批量删除)。...您的查询由 C# 编译器检查并允许轻松重构。 但是,它不像 LINQ to SQL 或实体框架那么重。...这种方法更容易推理您的数据访问,从而清楚地知道什么 SQL 在什么时间执行,同时减轻意外行为、隐式 N+1 查询和重对象关系映射器 (ORM) 中普遍存在的泄漏数据访问。
EF Core 批量加载模型 通常情况下,在使用ORM的时候,我们不希望过度的使用特性来标注实体类。因为如果后期需要变更ORM或者出现其他变动的时候,使用特性来标注实体类的话,会导致迁移变得复杂。...而且大部分ORM框架的特性都依赖于框架本身,并非是统一的特性结构,这样就会造成一个后果:本来应该是对调用方隐藏的实现就会被公开,而且在项目引用关系中容易出现循环引用。...所以,我在开发中会寻找是否支持配置类,如果使用配置类或者在ORM框架中设置映射关系,那么就可以保证数据层的纯净,也能实现对调用方隐藏实现。...在Domain.Implements 中添加后,在BaseRepository 中添加如下引用: using System.Linq; using System.Linq.Expressions; 实现方法...,在使用条件查询单个数据的时候,我使用了SingleOrDefault而不是FirstOrDefault。
领取专属 10元无门槛券
手把手带您无忧上云