`

Entity Framework 学习总结之六:EntitySQL 介绍入门

 
阅读更多

Entity SQL Language 简介

什么是 Entity SQL

Entity SQL 类似 SQL 语言,它的存在是为了查询 ADO.NET Entity Framework EF ),以用于支持 Entity Data Model EDM EDM 表示一组实体与关系( ER )的集合,映射到指定的数据源(可以是 MsSql 或其它类型的数据库)。 Entity SQL 支持 EDM ,使用户能够有效地查询数据。

 

Entity SQL T-SQL

Entity SQL 支持 EDM 的直接查询,包括它的继承及关系。它在语法上与 T-SQL 类似,但也有很多不同。

 

支持与不支持的查询:

1) from 子句

2) in exists

3) union, intersect, except 来表示并交差集

4) join 表达式

5) 支持 p.Address.City 这种级联查询

6) 不支持 * 操作

7) group by 时也要 select k from T as t group by (t.x + t.y) as k 这种方式

8) 无法使用 T-SQL 的函数

 

它支持 T-SQL 的子查询和表达式,它可以用于任何支持它的数据库,这里给出一些合法的表达式:

·    1+2 *3

·    "abc"

·    row(1 as a, 2 as b)

·    { 1, 3, 5}

·    e1 union all e2

·    set(e1)

 

对比的例子:

T-SQL select t.x + t.y from T as t group by t.x + t.y

Entity SQL select k from T as t group by (t.x + t.y) as k

 

Entity Sql 也支持这种方式: select Tab.a from Tab

 

Entity SQL 支持的数据类型:

·    第一类是原始数据类型,例如 EMD.Int32

·    第二类是在模式( Schema )中定义的类型,例如实体类型、关系类型等;

·    第三类是临时出现的类型:像集合、行和引用,它们都是匿名类型。

 

临时出现的类型

首先,为什么管它们叫归结为临时出现的类型?大家知道, EF 采用对象模型,而 SQL 等数据库是关系模型,它们之间要进行数据传递,必然有一个关系模型到对象模型的转换;另外,关系模型的相互数据交换,也可借用一下这些类型直接进行,而不必绕圈子。而这些类型的数据,一旦这个交互种过结束,也就意味着这个类型的对象将会消亡。故将这一些类型归结为一类。

 

其次,这一类包含了哪些数据类型?

1) 集合( Collection

2) 行( Row

3) 引用 (Ref)

 

集合: 使用 MULTISET() 或者花括号 ——{} 来创建,例如: MULTISET("Lenovo", "HP", "ASUS") ,这等价于: {"Lenovo", "HP", "ASUS"}

 

可以用集合返回一系列的值,例如: SELECT BRAND FROM MULTISET("Lenovo", "HP", "ASUS") AS BRAND

 

这将返回三个 String 类型的行,每行一个品牌名称。

 

再如: MAX(MULTISET("Lenovo", "HP", "ASUS")) ,将会根据字母进行排序后,返回值最大的字符串 ——Lenovo

 

行: 行的概念比较简单,它使用关键字 ROW 构建,形成一个行对象。例如: ROW("Lenovo" as Brand, "T61" as Type) ,将会返回一个由 Brand Type 列构成的行对象。

 

将行和集合稍作组合,便可以返回一个多行的集合: MULTISET(ROW("Lenovo" as Brand, "T61" as Type),ROW("HP" as Brand, "V3911TU" as Type))

 

注:列名称取的是第一个行对象的别名,下面这个语句,跟上面这一语句是等效的: MULTISET(ROW("Lenovo" as Brand, "T61" as Type),ROW("HP" as aaa, "V3911TU" as bbb))

 

引用: 相当于数据库中的指针。有两种方式来创建引用。

 

第一种,使用 REF 关键字。

select value c from NorthwindEntities . Customers as c

将返回所有的 Customers 的对象集合。

 

那么,通过添加关键字 REF

select ref (c) from NorthwindEntities . Customers as c

将返回一个引用集合:

 

第二种,使用 CREATEREF 关键字。例如:

CREATEREF ( NorthwindEntities . Employees , ROW ( 1 ));

其中使用 ROW 关 键字,传入需要引用的行的主键的值。那么,我们有什么必要去使用引用?我们可以把引用看成是一种获取数据的轻型的解决方案,我们记录了在哪儿去获取值,但 是并没有真正的数据获取出来,这样,不到必要时候,就没有必要在应用程序和数据库之间传递大量的数据。在上面那条语句中,我们并没有取出所有的值。而一旦 必要,只要访问一下这个实体集的任意一个属性,或者使用 DEREF 表达式,即可获取数据。

 

例如: CREATEREF ( NorthwindEntities . Employees , ROW ( 2 )). Address

 

如果要获取整个行的,则使用 DEREF DEREF ( CREATEREF ( NorthwindEntities . Employees , ROW ( 2)))

 

其实,如果我们改一个形式:

DEREF ( CREATEREF ( NorthwindEntities . Employees , ROW (@ EmployeeID )))

 

在实际应用中,我们经常要根据主键,来获取一个实体,这时,把传入的主键参数化,返回整个实体。这也可以算是一个典型应用了。

 

注释

Entity SQL 查询可以包含注释。注释行以两个短划线 (--) 开头。

例如: " select ref (c) from NorthwindEntities . Customers as c -- this a comment "

 

ESQL 内部存在一些关键字: NULL BOOLEAN INTEGER DECIMAL FLOAT DOUBLE STRING DATETIME TIME DATETIMEOFFSET BINARY GUID

 

这些类型几乎都是可以通用于各种数据库的。 Entity SQL 支持的字符集: UTF-16

分享到:
评论

相关推荐

    EntityFrameworkCore.BootKit:EntityFrameworkCore入门套件

    EntityFrameworkCore引导工具包(EFBK)是用于使用.NET EntityFrameworkCore的快速入门数据库连接库。 特征: 继承自EntityFrameworkCore触发器以启用条目更新通知。 支持多种数据库,例如MySql,SQL Server,...

    .netcore入门4:Microsoft.EntityFrameworkCore操作笔记

    EntityFrameworkCore实例操作sqlserver数据库,实现增删改查(dbfirst和codefirst) 博文地址:https://blog.csdn.net/u010476739/article/details/100775556

    EntityFrameworkCore.Triggered:EF核心的触发器。 在将它们提交到数据库之前和之后对DbContext中的更改进行响应

    EntityFrameworkCore.Triggered :angry_face_with_horns: 触发EF Core。 在DbContext中将更改提交到数据库之前和之后进行响应。 NuGet软件包 EntityFrameworkCore.Triggered EntityFrameworkCore.Triggered....

    Entity Framework 教程

    Entity Framework 教程入门教程

    EntityFrameworkCore:EntityFramework Core的NoSQL提供程序

    欢迎来到EntityFrameworkCore的文档数据库(NoSQL)提供程序之家! 该存储库当前仅包含EF Core的MongoDB提供程序。 但是,当前路线图中已计划通过进一步的NoSQL提供程序产品来扩展此功能。 MongoDb是一种非常流行...

    Microsoft .NET Framework 3.5 Service Pack 1

    有关更多信息,请参见 Getting Started with the Entity Framework(实体框架入门)。实体框架还引入了一些其他功能,包括支持 SQL Server 2008 的新类型、默认实体图形序列化和实体数据源。在此版本中,实体框架...

    WebApplication28.rar

    .net core的mvc入门实例代码 orm数据访问层用的是entity framework,数据库用的是sql server

    silverlight 3 控件经典入门学习案例

    10.强大的DataGrid组件[2]_数据交互之ADO.NET Entity Framework 11.强大的DataGrid组件[3]_数据交互之Linq to SQL——Silverlight学习笔记 12-13.强大的DataGrid组件[4]_实现CURD 14.强大的DataGrid组件[6]_调用...

    XPO:.NET Framework .NET Core .NET Standard 2.0的DevExpress eXpress持久对象(XPO)ORM

    子文件夹包含性能基准,可用于针对Entity Framework Core和Entity Framework 6测试XPO。包括所有必需的DevExpress引用。 无需技术支持即可免费获得 如果您不需要DevExpress支持团队的技术帮助,则可以免费在应用...

    asp.net知识库

    在Framework1.0下同时连接SqlServer和Oracle的一些体会 XML XPath XPath最通俗的教程(ZZ) XPath中相对路径和绝对路径 XPath 简单语法 Asp.Net(C#)利用XPath解析XML文档示例 XSL .Net框架下的XSLT转换技术简介 一个...

    StackExchange开源.Net ORM框架 Dapper.NET.zip

    Entity framework ExecuteStoreQuery 631ms Performance of SELECT mapping over 500 iterations - dynamic serialization Method Duration Remarks Dapper ...

    Dapper从入门到精通

    Dapper是一个适用于.NET平台、轻量级的ORM框架,在性能方面拥有微型ORM之王的美誉,几乎与原生ADO.NET数据读取器一样快,如果你在小的项目中使用Entity Framework、NHibernate等框架来处理大数据访问及关系映射,...

    Daarto:ASP.NET Core Identity存储的Dapper实现

    达托该存储库的主要目的是演示使用SQL Server和的存储的自定义实现,以防您不想使用Entity Framework提供的默认实现。 该示例应用程序使用ASP.NET Core 3.1,并且是使用和SQL Local DB构建的。入门该解决方案包含一...

    LINQPad.QueryPlanVisualizer:LINQPadSQL Server和PostgreSQL查询执行计划可视化工具

    该库可以显示LINQ to SQL驱动程序和Entity Framework Core 5查询计划。 从NuGet安装 如果您具有LINQPad的Developer或更高版本,则可以使用NuGet中的LINQPadQueryPlanVisualizer程序包将可视化工具添加到查询中。 ...

    LINQ 实战 1/11

    第6章 LINQ to SQL入门 156 6.1 走入LINQ to SQL 157 6.1.1 创建对象映射 159 6.1.2 设定DataContext 161 6.2 通过LINQ to SQL读取数据 161 6.3 继续改进查询 165 6.3.1 过滤 165 6.3.2 排序和分组 ...

    Inloop.StudentEnrolment:申请处理学生入学

    对于数据库访问,EntityFramework Core已与SQL Server一起用作数据源。 ####入门该应用程序默认在端口5001和5000上运行,可以从launchSettings.json文件进行更改。 要开始,克隆或下载源代码,请在“ ...

    LINQ 实战 3/11

    第6章 LINQ to SQL入门 156 6.1 走入LINQ to SQL 157 6.1.1 创建对象映射 159 6.1.2 设定DataContext 161 6.2 通过LINQ to SQL读取数据 161 6.3 继续改进查询 165 6.3.1 过滤 165 6.3.2 排序和分组 ...

    LINQ 实战 4/11

    第6章 LINQ to SQL入门 156 6.1 走入LINQ to SQL 157 6.1.1 创建对象映射 159 6.1.2 设定DataContext 161 6.2 通过LINQ to SQL读取数据 161 6.3 继续改进查询 165 6.3.1 过滤 165 6.3.2 排序和分组 ...

    LINQ 实战 2/11

    第6章 LINQ to SQL入门 156 6.1 走入LINQ to SQL 157 6.1.1 创建对象映射 159 6.1.2 设定DataContext 161 6.2 通过LINQ to SQL读取数据 161 6.3 继续改进查询 165 6.3.1 过滤 165 6.3.2 排序和分组 ...

    LINQ 实战 7/11

    第6章 LINQ to SQL入门 156 6.1 走入LINQ to SQL 157 6.1.1 创建对象映射 159 6.1.2 设定DataContext 161 6.2 通过LINQ to SQL读取数据 161 6.3 继续改进查询 165 6.3.1 过滤 165 6.3.2 排序和分组 ...

Global site tag (gtag.js) - Google Analytics