我允许 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 表中。瞧!就像吃蜗牛、戴着贝雷帽的猫说的那样。