我允许WAMS向导创建“测试”表(“项目”),因此可以在设置WAMS之后方便地创建该表。

然后,我想创建一个实际上对我有用的表。向导中的说明确实会说:“您以后可以使用上面的“数据”选项卡添加和删除表。”

因此,我做到了,并且确实创建了一个表,但是现在看不到可以更改表结构的地方(IOW,添加列)。我尝试过2次单击服务,2次单击表,选择“新建”按钮,右键单击表中唯一的列名(id)等,但都无济于事。

我也感到困惑的是,我用这种方式创建的表与现有的SQL DB表之间的关系吗?或者现在可以不用该SQL DB(一旦我设置了这些WAMSical表)就可以了吗?

还是为什么不能将现有的SQL DB表关联到WAMS?如果可以的话-怎么办?

更新

另外,看来写的东西和我实际遇到的不匹配。这(来自http://msdn.microsoft.com/en-us/magazine/jj721590.aspx)不是真的/对我而言没有发生:

“ 2.创建一个关系表来存储数据。单击“创建TodoItem表”按钮时,向导将根据您先前创建(或重复使用)的Windows Azure SQL数据库自动创建表。”

我尝试“从头开始”,创建了一个新的WAMS。再次,当我选择现有的SQL DB时,出现“数据库和移动服务不在同一地区-性能将下降...此外,从数据库发送到移动服务的数据将计为可计费带宽使用情况。我们建议您在与移动服务相同的位置选择一个数据库。”

我想,但是如何?为什么WAMS不自动为我调整此设置?或者至少让我选择将数据库和移动服务放在同一位置?

更新2

有趣的是,我可以在LINQPad中看到新表。我已经有两个SQL DB表显示在该连接信息下,但是与这些表处于同一级别的是我的WAMS名称,下面是“默认” Items表,也是我创建的我自己的表之一(不过,只有一列,特别是“ Id(Int64)”

IOW,我在LINQPad中看到的是:

blaBlaBla.database.windows.net,1433.blaBla
BlaBla
    BlaBlaSQLDB_Table1
    BlaBlaSQLDB_Table2
    wamsName
        Items
            Id (Int64)
        BlaBlaWAMSTable
            Id (Int64)


...所以我现在该如何扩展/管理“ BlaBlaWAMSTable” ...

更新3

好吧,这里好看; LINQPad再次解救:

select * from <WAMSName>.<TableName>


...显示通过项目中的类创建所需的表后有一条记录(Azure / WAMS管理区域中不存在)

...当然,LINQPad会显示以这种方式添加的新添加的列。

我要做的就是按照提供的步骤操作(参考Azure SDK,添加相应的using子句等),然后添加此方法对其进行测试:

private async void InsertTestRecordIntoWAMSSQLDBTable()
{
    <WAMS Table class name> invitation = new <WAMS Table class name> { SenderID = "[email protected]", ReaderDeviceID = "00-AA-11-BB-01-AB-10-BA", ReaderName = "B. Clay Shannon", SenderUTCOffset = 5, SenderDeviceID = "BA-10-AB-01-BB-11-AA-00" };
    await App.MobileService.GetTable<<WAMS Table class name>>().InsertAsync(invitation);
}


...而且有效。现在,拥有一些用于选择查询和更新的示例/示例将非常好。

还有(到目前为止)我还有一个大问题:我可以修饰/注释表类的列/成员吗? IOW,我可以更改一下吗:

公开课
{
public int ID {get;组; }
公共字符串SenderID {组; }
公共字符串ReaderDeviceID {get;组; }
公共字符串ReaderName {get;组; }
public int SenderUTCOffset {get;组; }
公共字符串SenderDeviceID {组; }
}

...像这样:

公开课
{
[主要,AutoInc]
public int ID {get;组; }
[索引]
公共字符串SenderID {组; }
[独特]
公共字符串ReaderDeviceID {get;组; }
[MaxLength(255)]
公共字符串ReaderName {get;组; }
public int SenderUTCOffset {get;组; }
公共字符串SenderDeviceID {组; }
}



我不能完全做到这一点,因为它们是SQLite批注,但是由于我无法从Azure / WAMS门户管理表,因此如何指定这些属性?

在代码中更改了表的设计之后,我能够看到这些列已添加到WAMS门户中的表中,但是看来我只能对列执行的操作是添加索引...

更新4

事实证明,在WAMS中创建表就像饼图一样容易(但不像pi一样容易/像pi一样难)-一旦您知道如何做。

创建WAMS后,选择“数据”,然后选择“创建”以创建表。给它命名,然后选择所需的权限。这将为您提供一个致命的,沉闷但“生机勃勃”的数据库表,其中包含一个,count'em,一个,列:ID,一个BigInt,索引。

然后,要实际上在表中添加更多列,我发现的最简单方法(我发现的唯一方法是并且很简单)是:

1)创建一个与数据库表相对应的类,例如SQLite,例如:

public class WAMS_DUCKBILL
{
    public int Id { get; set; }
    public string PlatypusID { get; set; }
    public DateTime UpdateTimeUTC { get; set; }
    public double Income { get; set; }
    public double Outgo { get; set; }
}


2)编写一个将记录添加到该表的方法,例如:

        private async void InsertTestRecordIntoWAMSDuckbillTable()
        {
            WAMS_DUCKBILL duckbill = new WAMS_DUCKBILL { PlatypusID = "42", UpdateTimeUTC =
DateTime.Now, Income = 3.85, Outgo = 8311.79 };
            await MobileService.GetTable<WAMS_DUCKBILL>().InsertAsync(duckbill);
        }


3)从App.xaml.cs的OnLaunched事件中调用该方法

4)然后可以通过在LINQPad中运行以下查询来看到(或者您想将pee [k,r]撒入数据库):

SELECT * FROM platypi.WAMS_DUCKBILL


称我为老式,但是请注意,我在这里使用的是旧式SQL,而不是LINQ;告我无论如何,LINQPad都表明测试记录确实已插入WAMS表中。瞧!就像吃臭鼬的人一样,贝雷帽像猫一样说话。

最佳答案

应用程序开发人员是Windows Azure移动服务(WAMS)的重点,他们不希望花费大量时间来开发后端。因此,数据模型比您想象的要容易。

WAMS中的表始终由SQL数据库中的表支持。您可以通过门户网站创建和删除表。

创建列有些不同。您只需使用列即可创建列。一旦为不存在的列写入数据,WAMS就会自动创建该列。那就是动态模式。开发之后,您应该禁用动态架构。您可以在“移动服务”的“配置”中找到它。

文档:Data access in Windows Azure Mobile Services

08-28 02:03