4

我允许 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 数据库时,我得到“数据库和移动服务不在同一区域 - 性能会下降......此外,从数据库发送到移动服务的数据将被计为计费带宽使用量。我们建议您选择与移动服务位于同一位置的数据库。”

我也想,但是怎么做?为什么 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 = "donkeyKongSioux@supermax.gov", 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,我可以改变这个:

公共类 { 公共 int Id { 获取;放; } 公共字符串 SenderID { 获取;放; } 公共字符串 ReaderDeviceID { 获取;放; } 公共字符串 ReaderName { 获取;放; } 公共 int SenderUTCOffset { 获取;放; } 公共字符串 SenderDeviceID { 获取;放; } }

...到这样的事情:

公共类 { [Primary, AutoInc] public int Id { get; 放; } [索引] 公共字符串 SenderID { 获取;放; } [唯一] 公共字符串 ReaderDeviceID { get; 放; } [MaxLength(255)] 公共字符串 ReaderName { get; 放; } 公共 int SenderUTCOffset { 获取;放; } 公共字符串 SenderDeviceID { 获取;放; } }

?

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

在代码中更改表的设计后,我可以看到这些列已添加到我在 WAMS 门户中的表中,但似乎我对这些列唯一能做的就是添加索引......

更新 4

事实证明,在 WAMS 中创建表就像馅饼一样容易(但不像 pi 那样容易/像 pi 那样难)——只要你知道如何去做。

创建 WAMS 后,选择Data,然后选择Create以创建表。给它一个名字,然后选择你想要的权限。这将为您提供一个致命的单调但“活”的数据库表,其中包含一个,count 'em,一个,列:ID,一个 BigInt,索引。

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

1)创建一个对应数据库表的类,一个la 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 表中。瞧!就像吃蜗牛、戴着贝雷帽的猫说的那样。

4

1 回答 1

1

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

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

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

文档:Windows Azure 移动服务中的数据访问

于 2013-12-13T18:38:22.423 回答