Azure Services Platform Step by Step-(3) 赤手空拳玩转 SQL Data Services(SDS)

作者:流牛木马 来源:流牛木马 日期:2009-3-25

SDS 其实是很友善、很好玩的。这一节我们不会使用任何的编程语言, 流牛木马将带领大家,仅靠 SDK 里的一个叫做 SSDS Explorer 小工具来玩转 SDS,熟悉和实现上一篇讲述的一些内容。很有趣的哦~

在申请 Azure 后,经过耐心漫长地等待,你会收到一封叫做“Do Not Delete! Invitation Code to Microsoft .NET Services and Microsoft SQL Services”的邮件。

终于开始了!从邮件中复制出 Invitation Code,打开 http://portal.ex.azure.microsoft.com/,激活你的 SDS。

image

激活后,点击右上角的 Get Started。

image

进入 SDS,然后创建一个新的 Solution。注意:一个 Invitation Code 只能创建一个 Solution。

image

然后就来到了 .NET SERVICES 和 SQL SERVICES 的管理界面。

image

点击顶部的 Solution Credentials,修改 Solution 的密码。改成一个自己好记的吧 :)

image

好了,现在你已经有了自己好记的 Solution 名和密码了。

下载 SDS 的 SDK http://www.microsoft.com/downloads/details.aspx?FamilyId=0B1FA5C6-EC9D-440B-939E-481DD05F2627&displaylang=en

安装 SDK。

打开安装目录下的 SSDS Explorer

image

在这里我们先复习一下上一篇讲的 ACE 模型。

image

我们的操作顺序也是根据这一模型来的。

首先要建立一个 Authority,然后在它下面建立不同的 Container,最后再在 Container 下建立多个同类型或者不同类型的 Entity。

还是上一篇的例子,与上图对照,我们可以创建一个叫做 "food" 的 Authority,其下包括名为 "fruit" 和 "vegetable" 两个 Container。Container["fruit"] 中包括 3 个实体,分别是 "apple1"、"apple2"、"pear1"。注意,这里我们假设五角星代表 pear,三角形代表 apple。这样,在这个 Container["fruit"] 就包括了两种类型的三个 Entity。同样,在 Container["vegetable"] 中,我们假设圆形是白菜 cabbage,方形是西红柿 tomato,我们又有了 "tomato1", "tomato2", "cabbage1" 三个 entity,它们也属于两种不同类型。

接着我们在复习一下基本操作与 HTTP Verb 的映射表

HTTP Verb SDS Operation
GET Fetch、Query 查询
POST Create  新建
PUT Update 修改
DELETE Delete  删除

好了,够了,开工!进入 SSDE Explorer!!

image

第一步当然是创建 Authority。直接点击右边的image 按钮

此时文本框里会出现这样一段

image

在 <s:Id> 与 </s:Id> 中间输入 Authority 的名字,我这了就叫做 food 了。输入完成后点击image (因为根据上面的映射表,“新建”操作对应的 HTTP Verb 是 "POST")

此时可能会弹出 Credentials 对话框,输入刚刚设置的 Solution 名字和密码即可。

如果操作成功,底部的状态框会出现image 。如果出现的是image ,说明操作有误,请根据错误提示进行更改。

操作成功后,顶部的地址栏会变成

image

对了,这就是这个 Authority 的 URI 了。上一篇里说了,对这个 Authority 的所有操作,其实就是对这个 URI 的 HTTP 操作。

现在我们来建立两个叫做 "fruit" 和 "vegetable" 的 Container。

点击image ,在 <s:Id> 和 </s:Id> 中输入 "fruit",此时文本框如下图

image

点击image ,状态栏变成image

地址栏里显示的 URI 是 https://food.data.database.windows.net/v1/fruit,对了,这就是 "fruit" 这个 Container 的 URI。

现在就是在 fruit 中加入具体的 Entity 了。(vegetable 类似,略)。
我们假设 fruit 中有两种 Entity,一种是 Apple,包括的属性如下:

属性名 Weight Color Availability RecordDate
类型 Decimal String Boolean DateTime

另一种是 Pear,包括的属性如下

属性名 Weight IsPopular ProducingArea
类型 Decimal Boolean String

现在我们来添加第一个 Apple: "apple1"

由于我们是要在 fruit 这个 container 中插入 Entity,所以操作时请保持URI为https://food.data.database.windows.net/v1/fruit

点击右边的image

将默认的 <Entity /> 标签对的名字改为 <Apple />。

在 <s:Id/> 标签对中输入 "apple1"。

点击右边的属性区,依次添加属性。属性名就是节点标签名字,请注意更改。

描述属性的节点内有一个叫做 "xsi:type" 的 attribute,表示当前节点的类型。

如 <Weight xsi:type="x:decimal">1.2</Weight >,定义了一个叫做 Weight 的 String 属性,它的值是 1.2。

apple1 的最终外观如下:

image

同样的方法我们可以添加 apple2

image 

再添加 Pear 类型的 pear1

image 

呵呵,这样就添加完了。如果这个时候我想修改 apple1 呢?只需要在地址栏中输入 https://food.data.database.windows.net/v1/fruit/apple1,点击image ,修改好后再点击image 即可。(PUT 对应 UPDATE 操作)删除呢?呵,一个硕大的image 出现在底部,就不用我说了吧?

接下来我们就可以使用 LINQ 来玩弄它了!

基本语法如下

from e in entities [where condition] order by [property] select e

运算符和布尔操作符

image

比如,我们现在可以在地址栏中输入 https://food.data.database.windows.net/v1/

在查询框中输入 from e in entities where e.Id=="fruit" select e,点击image

此时文本框中就会出现 fruit 这个 Container 的内容。简单吧?

让我们循序渐进:
地址栏输入 https://food.data.database.windows.net/v1/fruit

查询框输入 from e in entities where e.Kind=="Apple" select e,点击image,此时文本框中就会展示出 apple1 和 apple2 的内容。image

再来。

执行查询 from e in entities where e.Kind=="Apple" && e["Color"]=="Red" select e

则只能看到 apple2 的内容,因为只有 apple2 的 "Color" 等于 "Red"

读者走到这里可能有疑问了。为什么是 e.Kind 和 e["Color"] 呢?到底是用 "." 还是用 "[]" 呢?解释一下:对于 Entity 的元数据属性(metadata property),需要使用 ".",如 e.Id, e.Kind;对于普通属性,则使用 "[]",如 e["Color"]。

读者可以继续练习更多:

  • from e in entities where e.Kind=="Apple" && (e["Color"]!="Red"||e["Color"]!="Blue") select e  (使用括号)
  • from e in entities where e.Kind=="Apple" && (e["Weight"]>=4) select e (使用表达式)
  • from e in entities where (e["Weight"]>=4) select e(多种Kind的Entity可以混合在一起查询)
  • from e in entities where e["RecordDate"]>="2008-12-15" select e(使用日期)
  • from e in entities select e (取得所有Entity)
  • from e in entities where e.Id>"pea" select e (字符串使用比较符号)

注意:同一个 Kind 的 Entity 可以包含的不同的属性(不推荐)。比如我们可以把 apple1 中的 <Availability /> 属性删除掉,完全没有影响。可以执行以下查询进行测试
from e in entities where e["Availability"]==false  && e.Kind=="Apple" select e

怎么样?很简单很有趣吧?

“赤手空拳”与 SDS“肉搏"到此为止。在下一篇中,我们将使用 C# 语言,对以上所有的操作进行编程实现,敬请关注。

相关文章