`

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

分享到:
评论

相关推荐

    Entity Framework官方中文教程

    为了适应不同应用场景,Entity Framework Core提供了多个.NET实现的支持,并详细描述了不同的数据库提供程序(如Microsoft SQL Server、SQLite、内存优化表InMemory),以及如何编写自定义的数据库提供程序。...

    Entity_Framework_学习.pdf

    Entity Framework(简称EF)是一个微软的ORM(对象关系映射)框架,它允许开发人员通过面向对象的方式来操作数据库,而不是直接使用SQL语句。EF是作为.NET Framework的一部分提供的,并且在.NET4.0版本中得到了微软...

    ADO.NET EntityFramework 完整版教程(从初级到高级)

    ### ADO.NET Entity Framework 教程知识点概览 #### 一、Entity Framework 概述 - **背景**:Entity Framework (EF) 是 Microsoft 推出的一款 ORM (Object Relational Mapping) 工具,旨在简化数据访问层的开发,...

    EntityFramework学习快速入门案例

    EntityFramework(EF)是Microsoft开发的一个对象关系映射(ORM)框架,用于.NET应用程序,它允许开发者使用.NET语言(如C#)与数据库进行交互,而无需编写SQL语句。这个"EntityFramework学习快速入门案例"旨在帮助...

    Entity Framework orm教程

    1. EntityFrameworkCore(EFCore)与EntityFramework6(EF6)的对比: - EFCore是轻量级、可扩展和跨平台的版本,专注于支持.NET Core项目。 - EF6是一个经过长时间测试的数据访问技术,功能丰富且稳定性较高。 -...

    Entity Framework 4.0 Recipes

    **Entity Framework 4.0 Recipes** 是一本非常实用的开发参考书,不仅为初学者提供了易于理解的入门指南,也为经验丰富的开发者提供了深入的技术细节和最佳实践。通过本书的学习,读者将能够充分利用 EF 4.0 的强大...

    Entity Framework Core.pdf

    Entity Framework (EF) Core是微软开发的一个轻量级、可扩展且开源的对象关系映射(ORM)工具,专为.NET开发者设计,简化了数据库访问。它允许开发人员使用.NET对象来处理数据库,避免了大量的数据访问代码。EF Core...

    Entity Framework 入门事例

    ### Entity Framework 入门事例解析 #### 一、Entity Framework 概览 **Entity Framework**(EF)是Microsoft提供的一款对象关系映射(ORM)框架,用于.NET平台上的应用程序访问数据库。它允许开发者以面向对象的方式...

    Entity Framework 初步了解

    在ADO.NET Entity Framework初学入门和ADO.NET Entity Framework 学习初级篇文档中,你可能会找到关于如何设置EF项目、创建实体模型、执行基本查询、处理关系、事务以及性能优化等方面的内容。这些文档将帮助你逐步...

    EntityFrameworkCore.BootKit:EntityFrameworkCore入门套件

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

    EntityFramework入门1

    【EntityFramework入门1】 Entity Framework (EF) 是微软开发的一款对象关系映射(ORM)框架,用于.NET应用程序,使得开发者可以使用C#等面向对象的编程语言与数据库进行交互,而无需关注底层的SQL语句。它将数据库...

    EntityFramework 帮助文档

    迁移是EntityFramework中一个重要的部分,文档详细介绍了如何管理和应用迁移,包括在团队环境中的协作、使用Migrate.exe工具,以及自定义迁移历史记录和操作。此外,还讨论了反向工程(基架)的方法,例如使用EDMX...

    Entity_Framework_教程.pdf

    本教程旨在为初学者提供一个全面了解 Entity Framework 的入门指南,涵盖了从基础知识到高级主题的内容。通过学习本教程,读者将能够熟练地使用 Entity Framework 进行高效的数据访问操作,并掌握相关的最佳实践和...

    ASP.NET EntityFramework Demo

    本教程是一个简单的ASP.NET EF示例,非常适合初学者入门学习。 首先,我们来了解ASP.NET。ASP.NET是.NET框架的一部分,它是一个用于构建Web应用的服务器端技术,提供了丰富的功能和工具,支持多种Web应用模型,如...

    Programming Entity Framework

    - **方法使用**:除了LINQ和EntitySQL之外,还可以使用ObjectQuery和ObjectSet等方法进行数据查询。 - **示例演示**:通过具体示例说明不同方法的应用场景。 **3.6 最短的查询** - **优化技巧**:介绍如何通过减少...

    ADO.NET Entity Framework 入门示例向导

    通过学习和实践这个入门示例向导,你将能够熟练地使用Entity Framework进行数据操作,无论是在简单的单表查询还是复杂的多表关联场景中。在实际的项目开发中,这将大大提高你的开发效率和代码质量。

Global site tag (gtag.js) - Google Analytics