首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Rafy 领域实体框架设计 - 重构 ORM Sql 生成

由于 09 年最初设计时,ORM 部分设计并不是最重要部分,那里 Rafy 核心是产品线工程、模型驱动开发、界面生成等。...IQuery 作为描述查询核心类型,被重命名为 IPropertyQuery,所有方法参数也都直接面向 Rafy 实体《托管属性》。但是整体结构上,还是与原框架保持一致。...33: /// 一般使用在以下情况:当引用属性定义基类,而当前正在对子类进行查询时。...Linq Query:为了给开发人员提供更易用接口,需要提供 Linq 语法支持。本层用于解析 Linq 表达式树,并生成最终实体查询对象。...可以使用最易用 Linq、旧 PropertyQuery,同时也可以直接使用 IQuery 接口来完成复杂查询。 组件详细设计 Sql 语法树 使用解释器模式设计,用于描述 Sql 查询语句。

2K70

如何用ORM支持SQL语句CASE WHEN?

他给示例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来定制这个查询结果。

2.1K80
您找到你想要的搜索结果了吗?
是的
没有找到

用事实说话,成熟ORM性能不是瓶颈,灵活性不是问题:EF5.0、PDF.NET5.0、Dapper原理分析与测试手记

这些SQL多了越越烦,于是再度去围观ORM,发现它的确大大减轻了我SQL负担,除了那个令我心烦Content内容字段也被查询出来问题,不过我也学会了,单独建立一个实体类,影射文章表时候,不映射...当时这个ORM查询API--OQL很简单,只能处理相等条件查询,但是能够只选取实体部分属性,已经很好了,复杂点查询,结合在XMLSQL语句方式解决,其它一些地方,通过数据控件,直接生成SQL...小结一下我做CRUD历史,首先是对SQL乐此不彼,还发明了XML文件配置SQL然后映射到程序功能:SQL-MAP,然后觉得这样SQL尽管方便管理编写查询可以自动生成DAL代码,但是项目里面大量...2,Linq2Sql&EF:   2008年,随着.NET 3.5VS2008发布,MS官方ORM框架Linq2Sql也一同发布了,它采用Linq语法来查询数据库,也就是说Linq是MSORM查询...2.2,表达式树 有关表达式树问题,我摘引下别人文章段落,原文《表达式即编译器》: 微软.NET 3.5引入了LINQ

4.1K90

ORM查询语言(OQL)简介--概念篇

SQL核心是对“关系”操作,数据库理论研究证明,SQL是关系上完备,但是当代大多数高级语言都是面向对象,高级语言程序要跟关系数据库进行交互,SQL就成了必须桥梁,由于SQL基于“关系”程序语言...所以,ORM出现后,在一定程度上,它可以取代DAL,这使得你少了一个层工作量,对于提高工作效率是很重要。   下图是应用程序使用ORM使用传统DAL一个示意图。 ?...三、ORM查询语言  1,分离关注点   那么,这些问题ORM能够解决?...ORM查询语言,其实早就有了,从早期HibernateHQL,到MSLinqLinq2SQL,EF其实内部都是使用Linq生成SQL),它们都可以生成复杂SQL语句,它们都是直接作用于ORM...现在,我觉得LINQ也具有了这样能力,而我框架OQL,也有这样能力,所以我大胆称呼它是一个“ORM Query Laguage”,就像SQL是提供给RDBMS查询引擎使用一样,OQL是提供给

2.3K100

Rafy 框架 - 使用 SqlTree 查询

本文介绍如何使用 Rafy 框架 Sql Tree 查询: 除了开发者常用 Linq 查询,Rafy 框架还提供了 Sql 语法树方式来进行查询。...这隔离了与具体数据库耦合,使得开发者编写查询可以跨越多种不同数据库运行,甚至可以非关系型数据库运行。...查询中使用实体类型(Chapter)实体托管属性(Chapter.NameProperty)来定义表字段。 更多查询语法示例,见本节后面的更多示例。...例如,Linq 查询需要两个实体有确切实体关系才会最终生成 Join 语句;但是 SqlTree 则与 Sql 语句无异,开发者可以随意将两个实体对应表进行 Join 操作。...需要更好性能。 SqlTree 查询是 Rafy 框架查询数据(表格、实体核心实现。框架底层,Linq 查询也都是完全是基于 SqlTree 查询来实现

2.4K70

PDF.NET 数据开发框架 许可限制 框架源码获取

/ )时候,考虑到架构兼容性将来升级可能性,最重要是没有足够时间去为网站添加维护很多复杂程序,所以借鉴前人成功经验基础上,设计了 一套全新快速数据处理框架 PWMIS Data development...本套框架思想是借鉴Java平台Hibernate iBatis 而来,兼有ORMSQL-MAP特性,同时还参考了后来.NETLINQ(本框架成型于2006年,当时还未听说过LINQ)使用风格...映射与查询; BLL层实体对象查询(OQL) DAL层SQL语句.NET数据访问代码映射(查看 SQL-MAP 原理) 详细说来,框架还包含以下特色功能: 类似LINQ支持ORM实体查询OQL表达式...本框架 OQL基本设计LINQ或者说本人知道 LINQ之前,另外,.NET3.5框架才正式支持LINQ,而我们公司一个产品却因为采用了3.5框架安装部署不方便成为市场客服常常抱怨理由。...一套实用工具,可以生成实体根据SQL配置文件自动生成代码代码生成器以及SQL配置文件管理程序。

1.2K60

EF Core增删改查

那么为什么,我推荐使用配置类加载? 因为实际开发,一个完整程序或者网站实体类都会大于10,而这些如果使用属性形式会非常多,不利于实际开发。...3.花样查询 EF Core 支持Linq查询,所以查询时候可以使用Linq进行。...EF Core调用 ToList时候,会将已调用方法Linq转换成SQL语句,并正式向数据库发起查询。如果出现了Linq调用三方方法或者自己工具方法的话,可能会提示不受支持。...如果使用Linq表达式,则没关系,EF Core遇到这种情况时候,会把数据库里所有数据都加载到上下文中,再执行后续查询等操作。...待EF Core篇完成后,将带领一起去探索 NhibernateDapper,SqlSugar这三个ORM框架

3K20

.NET面试题系列 - LINQ to SQL与IQueryable

名言警句 "理解IQueryable最简单方式就是,把它看作一个查询执行时候,将会生成结果序列。" - Jon Skeet LINQ to ObjectLINQ to SQL有何区别?...LINQ to SQL可以查询表达式转换为SQL语句,然后在数据库执行。相比LINQ to Object,则是将查询表达式直接转化为Enumerable一系列方法,最终C#内部执行。...将查询表达式转换为SQL语句并不保证一定可以成功。 IQueryable 理解IQueryable最简单方式就是,把它看作一个查询执行时候,将会生成结果序列。...LINQ to SQLlambda表达式首先被转化为表达式树,然后再转换为SQL语句。 我们试图实现一个可以将where这个lambda表达式翻译为SQL语句查询提供器。...我们要自己一个简单查询提供器,所以我们要写一个IQueryProvider,然后构造函数传入。我们再次新建一个类型,继承IQueryProvider,此时我们又需要实现四个方法。

1.6K10

.NET深入解析LINQ框架(二:LINQ优雅前奏)

很多时候我们设计一个系统功能或者应用框架时,完全可以借助链式设计模式来优雅我们开发方式,使编码起来很顺利很方便。...对象图中可以很清楚看出各个对象属性方法,Student类我们定义了几个基本学生属性。...2】.LINQ框架核心设计原理 2.1.托管语言之上语言(LINQ查询表达式) 通过上面的例子我们应该基本了解了链式设计模式、链式查询方法奥妙用武之地。...LINQ.NET3.5版本引入核心程序集也就是System.Core.dll,有两个命名空间是直接关系到LINQ,分别是System.Linq(LINQ查询表达式直接对应链式查询方法集)、...使用IEnumerableIQueryable之间区别是什么?如何很好理解这两者LINQ整个框架关系。

2K30

打造轻量级实体类数据容器

看到这里聪明你也许要问了,上面的例子可以映射User之外实体?答案是完全可以!...先看一个例子,我们假设系统还存在一个实体类 Group,我们使用PDF.NETOQL表达式一个支持两个实体连接查询语句: OQL q=OQL.From(user)          .InnerJoin...那么完美,人家LINQ是近水楼台先得月,MS自家苗子,可以依靠“编译器语法糖”来写出优美的LINQ程序,但我们这个实现从原理上说非常轻巧,众多非官方ORM框架,真正支持了实体多表连接查询!...有关OQL实体连接查询仅在PDF.NET框架V4.1以后版本支持,该功能作为框架一项重要功能扩展,已经商业项目中开始使用,感兴趣朋友可以一起研究。...,PDF.NETORM框架实体对象查询语言--OQL,已经可以完成很复杂查询了,包括多实体类关联查询

679100

金三银四面试:C#.NET面试题中高级篇5-LinqEF

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#内部执行。

4K30

EntityFramework 外键值映射

如果在 EF OnModelCreating 配置了实体外键映射,也就是 SQL Server ForeignKey,那么我们添加实体时候,主实体主键值会自动映射到子实体外键值,并且这个操作一个...SaveChanges ,但如果没有 OnModelCreating 中进行外键映射配置,我们添加实体时候,就不会自动映射外键值了,什么意思呢?...1、实体框架主键类型约束问题 我们搭建整个实体框架过程,我们一般都是抽象封装处理很多基础增删改查、分页等常见数据处理功能,如下所示。...不过一般处理LINQ时候,它递归函数处理和我们普通做法有一些差异。...实体框架界面层查询,我们也不在使用部分SQL条件做法了,采用更加安全基于DTOLINQ表达式进行封装,最后传递给后台也就是一个LINQ对象(非传统方式实体LINQ,那样分布式处理中会出错

4.1K50

.NET深入解析LINQ框架(五:IQueryable、IQueryProvider接口详解)

那么LINQ来说,我们无法通过一个方法多次调用来产生我们想要表达式树,一个Where查询表达式扩展方法可能不仅仅是被LINQ查询表达式所使用,还有可能被ORM入口方法所使用,比如Update更新时候就需要...LINQ查询表达式与查询方法其实是一一对应,扩展方法是纵向概念,而LINQ查询表达式是横向,其实两者属于对应关系。...详情可以参见本人“NET深入解析LINQ框架(四:IQueryable、IQueryProvider接口详解)”一文; 3】.LINQ查询表达式链式查询方法其实都是空壳子 LINQ真正意图是方便我们构建表达式树...这一节我将给出LINQ核心执行图,我们将很清楚看见LINQ最终表达式树对象结构,它是如何构建一棵完整树形结构,IQueryable接口是怎么IQueryProvider接口配合,为什么...ORM一直是我们比较喜欢去框架,这里就使用自定义IQueryable来查询相应对象实体。首先我们需要继承IQueryable接口来让LINQ查询我们自己数据上下文。

1K30

.NET项目开发—浅谈面向接口编程、可测试性、单元测试、迭代重构(项目小结)

,下面我们看一下示例及分析; 2.1.1】 接口依赖倒置 传统三层架构,Facade调用BLL方法,BLL调用DAL方法,这难道不是违背了“单一职责”原则;一直我们都在强调“单一职责”设计原则...,为什么很多项目的每层之间都是直接使用下层接口,特别是我们核心DomainModel层,本来就是很干净纯业务处理,来一个什么数据访问接口真的很不美; 图1: ?...,我们对实体最直观认识是一个很POCO对象,但是如果你设计时候将数据访问DTO都设计成接口是否是有点不必要,有两个情况下可以平衡这种需要,第一如果你DTO不需要业务层传入数据层那么无所谓...,用来模拟程序运行时入口,可以当成是Application LayerFacade对象; 其实这里就能看出来我2.1】小结“单一职责”设计原则,我已经将数据访问代码ReportAnalyse...,需要使用相关IOC框架做支撑;我们看一下上面的代码很简洁,依赖IServiceReport接口,这个时候我们再回过头来对单元测试进行简单修改来适应可以持续重构代码; 为了使代码好测试点,我修改了一下

1K90

Asp.Net Core 扩展 Linq,简化自定义

前言 -为什么需要扩展 Linq 方法 Linq .net 中使用是比较多,而微软开发 linq 相关函数无法满足实际项目开发需求,我们需要自己来扩展一些方法。...c# 扩展方法 Asp.Net Core 开发或者其他后端开发中都会有一个需求(尤其对于台或者后台管理),那就是展示数据列表;当然不是普普通通数据列表展示,而是需要进行排序、分页、查询关键字来获取列表...甚至在有些时候需要三个同时处理来更精确筛选数据,而对于 Asp.Net Core 来说,用语言是 C#,是一门强类型语言,许多时候具有很大便利性,但是正因为这种原因,某些时候却不太方便使用,需要进行额外方式来进行处理...出来属性进行查询,但是实际使用,从前端传递过来一般都是字符串 "Name",而在后端进行查询时,以目前方式是无法将属性key写到where函数,也就无法执行查询通过"Name"来过滤数据;如果通过...但是天无绝人之路, c#拥有扩展方法、表达式目录树反射,可以将上面的方式进行优化。

1.7K10

PDF.NET开发框架“内存数据库”架构设计

(PDF.NET内存数据库架构图) 架构说明  1,核心类 MemDB 一个存储所有实体类集合集合,即Memory Data,应用程序要取数据,通过Get方法获取(T为实体类类型); 当获取数据时候...5,数据持久化 整个内存数据库使用数据都是PDF.NET实体类,这里使用PDF.NET框架“序列化”“反序列化”功能,将内存数据写入磁盘上pmdb文件,或者从文件加载数据到内存。...6,用户应用程序 这里是使用“内存数据库”数据地方,可以使用多种方式来操作内存数据,比如直接使用Linq To Object来查询内存数据,或者使用PDF.NETEntityQuery对象,实现内存数据库...实际使用可以完全抛弃DBMS,使用Linq To Object已经足够了。  7,PDF.NET Entity Object 这是整个系统使用实体数据了,它由相关组件调用传递。...有关PDF.NET开发框架详细内容,请看官网 http://www.pwmis.com/sqlmap 内存数据库目前已经投入生产使用,即将整合在PDF.NET框架下一个版本

1.3K70

ORM查询语言(OQL)简介--实例篇

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方法指定要查询实体属性,然后EntityContainerMap方法内采用 GetItemValue 方法获取要查询结果,查询时候GetItemValue 方法参数可以为...如果是局部使用多实体查询结果,可以不用定义这个“ViewModel”, MapToList方法,直接使用匿名类型,例如下面的例子: OQL q=OQL.From(entity1)

5K60

2022年了有哪些值得推荐.NET ORM框架

它解决了对象关系型数据库之间数据交互问题,ORM作用是关系型数据库业务实体对象之间作一个映射,这样我们具体操作业务对象时候,就不需要再去复杂SQL语句打交道,只需简单操作对象属性方法...因此我们在为自己负责项目选择合适ORM框架时候需要从项目的业务场景出发,选择最适合自己团队ORM框架(注意没有完美的框架,适合团队才是最好)。...查询接口类似于 LINQ。您可以使用 Chloe.ORM 通过 lambda 查询 LINQ 之类数据并执行任何操作(加入查询 | 组查询 | 聚合查询 | 插入 | 批量更新 | 批量删除)。...您查询由 C# 编译器检查并允许轻松重构。 但是,它不像 LINQ to SQL 或实体框架那么重。...这种方法更容易推理您数据访问,从而清楚地知道什么 SQL 什么时间执行,同时减轻意外行为、隐式 N+1 查询重对象关系映射器 (ORM) 普遍存在泄漏数据访问。

5.8K11

【asp.net core 系列】8 实战之 利用 EF Core 完成数据操作层实现

EF Core 批量加载模型 通常情况下,使用ORM时候,我们不希望过度使用特性来标注实体类。因为如果后期需要变更ORM或者出现其他变动时候,使用特性来标注实体类的话,会导致迁移变得复杂。...而且大部分ORM框架特性都依赖于框架本身,并非是统一特性结构,这样就会造成一个后果:本来应该是对调用方隐藏实现就会被公开,而且项目引用关系容易出现循环引用。...所以,我开发中会寻找是否支持配置类,如果使用配置类或者ORM框架设置映射关系,那么就可以保证数据层纯净,也能实现对调用方隐藏实现。...Domain.Implements 添加后,BaseRepository 添加如下引用: using System.Linq; using System.Linq.Expressions; 实现方法...,使用条件查询单个数据时候,我使用了SingleOrDefault而不是FirstOrDefault。

1.6K40

PDF.NET SOD 开源框架红包派送活动 && 新手快速入门指引

本套框架思想是借鉴Java平台Hibernate iBatis 而来,兼有ORMSQL-MAP特性,同时还参考了后来.NETLINQ(本框架成型于2006年,当时还未听说过LINQ)使用风格...注:框架支持工具指的是集成开发工具,可以连接各种数据库进行查询,生成实体类,SQL-MAP DAL SqlMap.config 文件。...注:框架支持工具指的是集成开发工具,可以连接各种数据库进行查询,生成实体类,SQL-MAP DAL SqlMap.config 文件。...程序每次都指定连接字符串查询命令类型,好处是“随用随取”,线程安全,随时随地“SqlHelper”,但不好之处就是代码冗余,所以可以把数据访问类类型连接字符串放到应用程序配置文件(App.config...每天这样CRUD代码是不是感觉有点浪费生命? 现在好了,你可以将所有SQL语句集中写到一个配置文件,集中管理维护你查询程序,甚至,这个工作你可以丢给DBA去做!

1.6K90
领券