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
激活后,点击右上角的Get Started
进入SDS,然后创建一个新的Solution。注意:一个invitation code只能创建一个Solution.
然后就来到了.NET SERVICES和SQL SERVICES的管理界面
点击顶部的Solution Credentials,修改solution的密码。改成一个自己好记的吧:)
好了,现在你已经有了自己好记的Solution名和密码了。
下载SDS的SDK http://www.microsoft.com/downloads/details.aspx?FamilyId=0B1FA5C6-EC9D-440B-939E-481DD05F2627&displaylang=en
安装SDK.
打开安装目录下的SSDS Explorer
在这里我们先复习一下上一篇讲的ACE模型。
我们的操作顺序也是根据这一模型来的。
首先要建立一个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!!
第一步当然是创建Authority.直接点击右边的
按钮
此时文本框里会出现这样一段
在<s:Id>与</s:Id>中间输入Authority的名字,我这了就叫做food了。输入完成后点击
(因为根据上面的映射表,“新建”操作对应的HTTP Verb是"POST")
此时可能会弹出Credentials对话框,输入刚刚设置的Solution名字和密码即可。
如果操作成功,底部的状态框会出现
。如果出现的是
,说明操作有误,请根据错误提示进行更改。
操作成功后,顶部的地址栏会变成
对了,这就是这个Authority的URI了。上一篇里说了,对这个Authority的所有操作,其实就是对这个URI的HTTP操作。
现在我们来建立两个叫做"fruit"和"vegetable"的Container
点击
,在<s:Id>和</s:Id>中输入"fruit",此时文本框如下图
点击
,状态栏变成
。
地址栏里显示的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
点击右边的
将默认的<Entity />标签对的名字改为<Apple />
在<s:Id/>标签对中输入"apple1"
点击右边的属性区,依次添加属性。属性名就是节点标签名字,请注意更改。
描述属性的节点内有一个叫做"xsi:type"的attribute,表示当前节点的类型。
如<Weight xsi:type="x:decimal">1.2</Weight >,定义了一个叫做Weight的String属性,它的值是1.2。
apple1的最终外观如下:
同样的方法我们可以添加apple2
再添加Pear类型的pear1
呵呵,这样就添加完了。如果这个时候我想修改 apple1呢?只需要在地址栏中输入https://food.data.database.windows.net/v1/fruit/apple1,点击
,修改好后再点击
即可。(PUT对应UPDATE操作) 删除呢?呵,一个硕大的
出现在底部,就不用我说了吧?
接下来我们就可以使用LINQ来玩弄它了!
基本语法如下
from e in entities [where condition] order by [property] select e
运算符和布尔操作符
比如,我们现在可以在地址栏中输入https://food.data.database.windows.net/v1/
在查询框中输入from e in entities where e.Id=="fruit" select e,点击
此时文本框中就会出现fruit这个Container的内容。简单吧?
让我们循序渐进:
地址栏输入https://food.data.database.windows.net/v1/fruit
查询框输入from e in entities where e.Kind=="Apple" select e,点击
,此时文本框中就会展示出apple1和apple2的内容。
再来。
执行查询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#语言,对以上所有的操作进行编程实现,敬请关注。
注:SQL Data Services现已更名为SQL Azure ——2009年7月