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

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

前言 Rafy 领域实体框架作为一个使用领域驱动设计作为指导思想的开发框架,必然要处理领域实体到数据库表之间的映射,即包含了 ORM 的功能。...旧代码讲解 最初采用的 Lite ORM 是一个轻量级的 ORM 框架,采用在实体对象上标记特性(Attribute)来声明实体的元数据,并使用链式接口来作为查询接口以方便开发人员使用。...40: /// 41: /// 可以调用此方法多次来指定排序的优先级。...Linq Query:为了给开发人员提供更易用的接口,需要提供 Linq 语法的支持。本层用于解析 Linq 表达式树,并生成最终的实体查询的对象。...重构的同时,我们为能想到的场景都编写了测试用例: 目前,框架版本也升级到了 2.23.2155。 有兴趣的同学,了解、下载最新的框架,请参考:《Rafy 领域实体框架发布!》。

2.1K70

Rafy 框架 - 使用 SqlTree 查询

本文介绍如何使用 Rafy 框架中的 Sql Tree 查询: 除了开发者常用的 Linq 查询,Rafy 框架还提供了 Sql 语法树的方式来进行查询。...例如,Linq 查询中需要两个实体有确切的实体关系才会最终生成 Join 语句;但是 SqlTree 则与 Sql 语句无异,开发者可以随意将两个实体对应的表进行 Join 操作。...需要更好的性能。 SqlTree 查询是 Rafy 框架查询数据(表格、实体)的核心实现。在框架底层,Linq 查询也都是完全是基于 SqlTree 查询来实现的。...Linq 的 Labmda 语法中的属性表达式(e.Name)需要绑定具体的实体类型(Book e),这导致了必须使用反射去生成表达式树,才能编写通条蚁。...但是,SqlTree 的语法是基于托管属性框架的,它不需要使用确切的实体属性表达式,只需要使用托管属性的运行时对象 IManagedProperty 即可(Book.NameProperty)。

2.4K70
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

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

    EF一般都是使用Linq表达式来编写查询,但Linq方式跟SQL在语法上还是有很大的差异,特别是Linq的左、右连接查询,跟SQL差异很大。...,OQL是可以进行其它平台移植的 .NET框架低版本支持:框架仅需.NET 2.0 支持,如果引入Linq方式,那么意味着框架需要.net 3.5及以上版本支持 简化条件调用:在Where方法中直接调用实体类的属性...,而且语法非常类似,如果用过Linq做表外联结操作的朋友就知道,Linq的方式跟SQL差异很大的,这里不多说,感兴趣的朋友请去查阅相关资料。...,请参考这篇文章《打造轻量级的实体类数据容器》   我们再来看看Linq的左、右连接,比较下哪个跟SQL最为接近: var LeftJoin = from emp in ListOfEmployees...但框架涵盖的内容面比较大,功能点很多,框架的每个方法背后都有实际的项目代码例子,换句话说框架完全是从各个实际的项目中总结、提炼出来的。

    5.3K60

    Rafy 中的 Linq 查询支持(根据聚合子条件查询聚合父)

    为了提高开发者的易用性,Rafy 领域实体框架在很早开始就已经支持使用 Linq 语法来查询实体了。但是只支持了一些简单的、常用的条件查询,支持的力度很有限。...特别是遇到对聚合对象的查询时,就不能再使用 Linq,而只能通过构造底层查询树的接口来完成了。由于开发者的聚合查询的需求越来越多,所以本周我们将这部分进行了增强。...接下来,本文将说明 Rafy 框架原来支持的 Linq 语法,以及最新加入的聚合查询支持及用法。...支持两个属性条件间的连接条件:&&、||。 支持引用查询。即间接使用引用实体的属性来进行查询,在生成 Sql 语句时,将会生成 INNER JOIN 语句,连接上这些被使用的引用实体对应的表。...,之前的版本已经支持了,各位可参见 Rafy 框架的用户手册。

    2.7K70

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

    8.LINQ可视化工具简单介绍一下? 9.LINQ to Object和LINQ to SQL有何区别? 10.除了EF,列举出你知道的ORM框架? 11.在哪些类型额项目中你会选择EF? 为什么?...实体框架EF是http://ADO.NET中的一组支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架。...ORM指的是面向对象的对象模型和关系型数据库的数据结构之间的互相转换。 (表实体跟表之间的相互转换) ORM框架有很多,EF框架是ORM框架的其中一种,是实现了ORM思想的框架。...功能也极大的提高开发和架构设计的效率. 3).EF跨数据支持的是ORM框架主要功能点之一,带来的是可以通过仅仅改变配置就可以做到跨数据库的能力 4.如何提高LINQ性能问题?...它的下载地址是http://www.linqpad.net/ 进入界面后,LINQPad可以连接到已经存在的数据库(不过就仅限微软的SQL Server系,如果要连接到其他类型的数据库则需要安装插件

    4.2K30

    EntityFramework 外键值映射

    Entity Framework 实体框架的形成之旅--实体框架的开发的几个经验总结 在前阵子,我对实体框架进行了一定的研究,然后把整个学习的过程开了一个系列,以逐步深入的方式解读实体框架的相关技术,期间每每碰到一些新的问题需要潜入研究...我的整个实体框架的学习和研究,是以我的Winform框架顺利升级到这个实体框架基础上为一个阶段终结,这个阶段事情很多,从开始客运联网售票的WebAPI平台的开发,到微软实体框架的深入研究,以及《基于Metronic...1、实体框架主键的类型约束问题 在我们搭建整个实体框架的过程中,我们一般都是抽象封装处理很多基础的增删改查、分页等常见的数据处理功能,如下所示。...使用实体框架后,主要就是利用LINQ进行一些集合的操作,这些LINQ的操作虽然有点难度,不过学习清楚了,处理起来也是比较方便的。...在实体框架界面层的查询中,我们也不在使用部分SQL的条件做法了,采用更加安全的基于DTO的LINQ表达式进行封装,最后传递给后台的也就是一个LINQ对象(非传统方式的实体LINQ,那样在分布式处理中会出错

    4.2K50

    EntityFramework数据持久化复习资料5、LINQ概述与应用(超终点)

    从数据库生成Class,2.由实体类生成数据库表结构,3.通过数据库可视化设计器设计数据库,同时生成实体类。 ORM (对象关系型映射)是将数据存储从域对象自动映射到关系型数据库的工具。...这个过程就是通过ORM框架来完成的,操作对象就是操作数据库也是通过ORM来完成的。ORM框架就是做对象和数据库的映射的。 那么EntityFramework的作用是什么?...在LINQ中,可以使用与查询数据库相同的编码模式来查询和转换XML文档、SQL数据库、ADO.NET数据集以及.NET集合中的数据,并支持LINQ查询的任何格式的数据。...into 提供一个标识符,它可以充当对join、group或select子句结果的引用 orderby 对查询出的元素执行排序(ascending/descending) join 按照两个指定匹配条件对等连接两个数据源...) { Console.WriteLine(item); } 遍历效果: 4、LINQ排序·返回列表 这里的关键字是orderby,正序是【ascending】倒序是【descending】。

    2.2K20

    ORM查询语言(OQL)简介--高级篇:脱胎换骨

    下面是来自SQLSERVER 联机帮助的说明: 子查询也称为内部查询或内部选择,而包含子查询的语句也称为外部查询或外部选择。 许多包含子查询的 Transact-SQL 语句都可以改用联接表示。...数据访问组件性能     这么多ORM框架,我并不是很熟悉,PDF.NET的目标只想在某些方面赶超MS的EF框架,据说现在EF6都快出来了,EF4.5在性能上上了一个台阶。...尽管EF是PDF.NET ORM 的强劲对手,但 PDF.NET ORM的查询语言OQL,相对于EF的查询语言Linq,还是有自己独立的特色,OQL比Linq更接近SQL,Linq是VS的语法糖,本质上...这样,不论是OQL的Select方法,Where方法还是OrderBy方法,都能够使用统一的堆栈结构来获取方法使用的属性字段了。...图3:OQLCompare 对象树     该图的内容,说明了构造上面的SQL条件的OQLCompare比较对象的树型结构,我们规定,每个节点下面只有左节点和右节点,左节点优先,左右子节点都可以是空,如果符合该条件

    2.6K70

    在LINQ to SQL中使用Translate方法以及修改查询用SQL

    Item实体中有一个Comments属性,是ItemComment实体的集合。这个例子将会使用这个再简单不过的模型。   ...LINQ to SQL在RTM之前的版本有个Bug,如果在查询中显式构造一个实体的话,在某些情况下会得到一系列完全相同的对象。...这种情况会在实体对象的属性名与数据表字段名不同的时候发生。在使用LINQ to SQL时默认生成的实体对象,其属性名与数据库的字段名完全对应,这自然是最理想的情况。...因此,如果您使用了ColumnAttribute中的Name属性改变了数据库字段名与实体对象属性名的映射关系,那么在创建匿名对象的时候还是要使用数据库的字段名,而不是实体对象名,如下: public static...to SQL时,我建议保持实体对象属性名与数据库字段名之间的映射关系。

    4.9K50

    【深入浅出C#】章节 9: C#高级主题:LINQ查询和表达式

    强大的查询能力: LINQ提供了丰富的查询操作符和方法,可以进行过滤、排序、投影、分组等多种查询操作。 面向对象查询: LINQ是面向对象的,可以对对象进行查询,而不仅限于关系数据库。...LINQ to Entities:用于将实体数据模型与数据库连接起来,支持使用LINQ查询进行数据库操作。 LINQ to XML:用于处理XML数据,支持以LINQ方式查询和操作XML文档。...这两个技术都是用于进行对象关系映射(ORM)的框架,它们使得将数据库操作转化为面向对象的代码更加容易。...Entity Framework: Entity Framework 是一个功能强大的 ORM 框架,支持多种数据库引擎,能够帮助开发者将数据库中的数据映射到 .NET 对象中,并提供了 LINQ 查询语言的支持...定义实体类: 定义 C# 类来映射数据库表格。

    2.3K61

    优化OEA中的聚合SQL

    之前写过几篇关于聚合对象SQL的文章,讲的是如果设计框架,使用一句SQL语句来加载整个聚合对象树中的所有数据。...由于没有使用其它的ORM框架,当时项目组决定做聚合SQL,主要是为了减少SQL查询的次数,来提升部分模块的性能。现在看来,当时虽然达到了这个目标,但是聚合SQL的API却不简单,使用极为不便。...有了这些数据,则可以在框架内部生成聚合SQL,在框架内部按照它们进行大表到聚合对象的加载。以下,我将这些数据称为聚合对象的“加载选项”。    ...框架中对象的聚合加载的实现,和手写时一样,也是基于原有的ReadFromTable方法的,也不复杂,贴下代码,不再一一描述: /// /// 聚合实体的加载器 /// 框架设计人员来说,往往很重要,只有流畅、易用的API才能对得起你的客户:框架使用者。以下我只把给出几个为达到流畅API而特别设计的类。

    1.6K70

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

    前言 -为什么需要扩展 Linq 方法 Linq 在 .net 中使用是比较多的,而微软开发的 linq 相关函数无法满足实际项目开发中的需求,我们需要自己来扩展一些方法。...普通查询 对于 Linq 查询来说,Where 和 OrderBy 使用时需要直接点出来属性或者字段才行,如下所示: // 数据结构 public class ArticleTag { public...if...else 来判断,那么将会是一个非常大的工程量,每个实体上面有 m 个属性,而一个项目中有 n 张表,那么几乎需要 m*n个判断进行处理,非常的差劲,不利于后续扩展和维护。.../ 查询基本实体 /// public class CoditionEntity { [JsonPropertyName("paginationKeyValue...summary> /// 使用自定linq扩展执行排序,查询,分页功能 item1: 未分页结果,item2:分页后的结果 /// /// <typeparam

    1.7K10

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

    本套框架的思想是借鉴Java平台的Hibernate 和 iBatis 而来,兼有ORM和SQL-MAP的特性,同时还参考了后来.NET的LINQ(本框架成型于2006年,当时还未听说过LINQ)使用风格...:采用LGPL协议,该协议允许商业使用,但仅限于包含类库发布,不得将源码作为商业行为销售分发,详情请看该协议的官方说明。...:采用LGPL协议,该协议允许商业使用,但仅限于包含类库发布,不得将源码作为商业行为销售分发,详情请看该协议的官方说明。...目前做到这个功能的除了Linq之外,没有更多的ORM具有这个能力,但是对比EF框架的查询语言Linq,OQL有自己的特色,它跟SQL更为接近,对.NET框架的依赖非常小,这使得你有可能将OQL移植到Java...下面给出一个简单的示例,有关该示例的详细内容,请参考这篇博客文章《DataSet的灵活,实体类的方便,DTO的效率:SOD框架的数据容器,打造最适合DDD的ORM框架》 SOD的实体类示例: public

    1.6K90

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

    本套框架的思想是借鉴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框架安装部署不方便成为市场和客服常常抱怨的理由。...更多成功案例等待你的实现:) 新版本信息 Ver 4.0 更新: 全面改写了实体类处理程序,效率提升10倍; 改进实体类生成器,支持从 SQLSERVER 表字段说明生成实体类属性说明;...(Entity).Select(....).Where(...).OrderBy(...).END); 实体类支持高效率分页; 优化了生成内部数据访问对象的效率(不再依赖于反射); 优化了其它操作的效率

    1.2K60

    Json.NET API-Linq to Json

    API文档中看到其中有个Linq To Json基本操作.详细看了其中API 中Linq to SQL命名空间下定义类方法.以及实现, 觉得参与Linq 来操作Json从某种程度上提高生成Json字符窜的效率...但是也从侧面也增加程序员编码的难度(如果刚用不熟练情况下 主要是在编码中控制生成Json字符窜正确的格式),另外一个关键借助了Linq对Json数据操作和转换更加直接.Linq To SQL 空间目的使用户利用...// ] 50 // } 51 //} 52 分析一下: 如果按照普通方法把一个List集合生成Json对象字符窜.步骤如下: List首先从数据库中取出.然后利用JsonConvert实体类下的...但是Property Index用户获得特定的Children子实体.无论是JSON数组索引或JSON对象的属性名的位置. ?...今天总结一些基本用法.如想看原版的Linq To Json 编译 请参考官方地址下API,代码如果看不懂可以查看Newtonsoft.Json.Linq命名空间下定义类和集成静待方法或直接联系我.

    1.4K00

    PDF.NET数据开发框架实体类操作实例

    本篇是 PDF.NET数据开发框架实体类操作实例(MySQL) 的姊妹篇,两者使用了同一个测试程序,不同的只是使用的类库和数据库不同,下面说说具体的使用过程。...: /*  * PDF.NET 数据开发框架  * http://www.pwmis.com/sqlmap  */ using System; using System.Collections.Generic...; using System.Linq; using System.Text; using PWMIS.DataMap.Entity; namespace TestMySqlEntity {     class...4,编写ORM实体类操作的测试代码: using System; using System.Collections.Generic; using System.Linq; using System.Text...:  //PostgreSQL 没有 @@IDENTITY 变量,所以无法拿到刚才的自增值,注释掉下面的修改方法 虽然注释了修改实体的方法,但只要手工给ID属性设置值,仍然可以修改实体。

    97360
    领券