拼吾爱程序人生

首页 » .Net编程 » Visual Studio.NET » Entity Framework之EntitySQL中的类型
cobra - 2008-10-5 21:10:00
EDM(实体数据模型)中定义了许多的类型。我们可以把它大致分为三类:第一类是原始数据类型,例如EMD.Int32。第二类是在模式(Schema)中定义的类型,例如实体类型、关系类型等;第三类是临时出现的类型:像集合、行和引用,它们都是匿名类型。

第一类第二类类型,大家已经接触颇多。我们来看一下什么是临时出现的类型。

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

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

1. 集合(Collection)

2. 行(Row)

3. 引用(Ref)

那么,如何使用这些类型?它们分别有哪些应用场景?

让我们由集合开始,看看它们的语法及典型场景。

集合:

集合使用MULTISET()或者花括号——{}来创建,例如:

MULTISET("Lenovo", "HP", "ASUS")

这等价于:{"Lenovo", "HP", "ASUS"}

这里给大家提个醒:MULTISET后面跟的是小括号,可别把它写成:MULTISET{Lenovo, HP, ASUS}——偷偷的告诉大家,偶一开始就是这么写的 -.-||

典型的,我们可以用集合返回一系列的值。例如:

Code


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

Code


将会根据字母进行排序后,返回值最大的字符串——Lenovo。



行:

行的概念比较简单,它使用关键字ROW构建,形成一个行对象。例如:

Code


将会返回一个由Brand和Type列构成的行对象。

将行和集合稍作组合,便可以返回一个多行的集合:

Code


返回结果如下:


 附件: 您所在的用户组无法下载或查看附件

这里,列名称取的是第一个行对象的别名,下面这个语句,跟上面这一语句是等效的:

Code


引用:

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

第一种,使用REF关键字。我们假设:

Code


将返回所有的笔记本的对象集合:


 附件: 您所在的用户组无法下载或查看附件

那么,通过添加关键字REF:

Code


我们将返回一个引用集合:


 附件: 您所在的用户组无法下载或查看附件

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

Code


其中,使用我们使用ROW关键字,传入需要引用的行的主键的值。

那么,我们有什么必要去使用引用?我们可以把引用看成是一种获取数据的轻型的解决方案,我们记录了在哪儿去获取值,但是并没有真正的数据获取出来,这样,不到必要时候,就没有必要在应用程序和数据库之间传递大量的数据。在上面那条语句中,我们并没有取出所有的值。

而一旦必要,只要访问一下这个实体集的任意一个属性,或者使用DEREF表达式,即可获取数据。

例如,下面的语句将返回Lenovo ThinkPad,因为它的主键是1,并且我们调用了品牌属性,它不再是简单的引用 ,而是的的确确传输了数据。

Code


如果要获取整个行的,则可以使用DEREF:

Code


那么,得到的结果是:


 附件: 您所在的用户组无法下载或查看附件

这个语句看上去很滑稽,但你的确可以这么用。

其实,如果我们改一个形式,这个语句就不这么滑稽了:

Code


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

小结:

本文介绍了EntitySQL中的三类类型(其实好像只介绍了一类^_^)。也许大家觉得这个没有什么用。其实,这就像是编程语言中学习Int、String一样,本身,它不能用于产生什么效益,但是,它们的的确确是程序设计中的最基础的概念。





(文/xiaomi7732  出处/博客园)

 您可能对 [Visual Studio.NET] 的这些文章也感兴趣:

.NET3.5中的高性能 Socket API
因为路径错误导致.NET的WEB项目不能打开的解决办法
.NET 开源项目
.NET 4.0: Type Equivalency (1):Byebye,PIA
c#中结构与类的区别
方法的直接调用,反射调用与……Lambda表达式调用
Building Domain Specific Languages on the CLR
Mono 2.0 体验
New cool admin modules for IIS 7
Remoting服务器端永久生存期,Web端调用
1
查看完整版本: Entity Framework之EntitySQL中的类型
Modify by pin5i DZNT_ExpandPackage 2.1.3258 2007-2008 pin5i.com
  Total Unique Visitors: