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テーブルの作成]ボタンをクリックすると、ウィザードは以前に作成(または再利用)したWindowsAzureSQLデータベースに基づいてテーブルを自動的に作成します。」
「ゼロから」試して、新しいWAMSを作成しました。繰り返しになりますが、既存のSQL DBを選択すると、「データベースとモバイルサービスが同じリージョンにありません-パフォーマンスが低下します...さらに、データベースからモバイルサービスに送信されるデータは、課金対象の帯域幅使用量としてカウントされます。モバイルサービスと同じ場所にあるデータベースを選択することをお勧めします。」
したいのですが、どうやって?WAMSがこれを自動的に調整しなかったのはなぜですか?または、少なくともDBとモバイルサービスを同じ場所に配置するオプションを提供してくれましたか?
更新2
興味深いのは、LINQPadで新しいテーブルを確認できることです。その接続情報の下に表示される2つのSQLDBテーブルがすでにありますが、それらのテーブルと同じレベルに私のWAMS名があり、その下に「デフォルト」のItemsテーブルと私が作成した独自のテーブルがあります(どちらも、 1つの列、具体的には「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、これを変更できますか:
public class {public int Id {get; セットする; } public string SenderID {get; セットする; } public string ReaderDeviceID {get; セットする; } public string ReaderName {get; セットする; } public int SenderUTCOffset {get; セットする; } public string SenderDeviceID {get; セットする; }}
...このようなものに:
public class {[Primary、AutoInc] public int Id {get; セットする; }[インデックス付き]publicstring SenderID {get; セットする; } [Unique] public string ReaderDeviceID {get; セットする; } [MaxLength(255)] public string ReaderName {get; セットする; } public int SenderUTCOffset {get; セットする; } public string SenderDeviceID {get; セットする; }}
?
SQLiteアノテーションであるため、正確にそれを行うことはできませんが、Azure / WAMSポータルからテーブルを管理できないため、これらの属性を指定するにはどうすればよいですか?
コードでテーブルのデザインを変更した後、それらの列がWAMSポータルのテーブルに追加されていることがわかりますが、列にできることはインデックスを追加することだけのようです...
更新4
WAMSでテーブルを作成するのは、円周率のように簡単です(ただし、円周率のように簡単ではありません/円周率のように難しいです)。
WAMSを作成したら、[データ] 、 [作成]の順に選択してテーブルを作成します。名前を付けて、必要な権限を選択します。これにより、致命的な鈍いが「生きている」データベーステーブルが1つ、count'em、one、column: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
昔ながらの私と呼んでくださいが、ここではLINQではなく疲れた古いSQLを使用していることに注意してください。だから私を訴えなさい。いずれにせよ、LINQPadは、テストレコードが実際にWAMSテーブルに挿入されたことを示しています。出来上がり!エスカルゴを食べる、ベレー帽をかぶった猫が言うように。