Xamarin.Forms 「付箋紙を張るやつ」を作ってみた(Azure Mobile Serviceは、なんとコードファーストだった)
1 Azureモバイルサービス
前回に続き、「付箋紙アプリ(サンプル)」のMicrosoft Azureのモバイルサービスの話です。
付箋紙アプリ(サンプル)のコードは、GirHubにあります。
データを保存する程度の処理であれば、Microsoft Azureのモバイルサービスを使用すると、極めてシンプルに記述できます。
細部は、以前投稿した「Xamarni.Forms AzureモバイルサービスによるToDoアプリ」を、ぜひ参照していただきたいのですが・・・
今回は、テーブルを自分で定義した事で初めて気が付いたことについて記載させて頂きます。
結論から言うと、コード(クラス)を記述するだけで、列が自動的に生成されます。なんとコードファーストだったのです。知りませんでした。
以下、今回の手順を記録しておきます。
2 クラス定義
最初に、テーブルにアクセスするためのクラスを定義します。今回のデータ構造は、下記のようになっています。
public class PostItItem{ public string Id { get; set; } [JsonProperty(PropertyName = "text")] public string Text { get; set; } [JsonProperty(PropertyName = "delete_flg")] public bool DeleteFlg { get; set; } [JsonProperty(PropertyName = "created_at")] public DateTime CreateAt { get; set; } }
クラスを定義しただけで、アプリを実行してみると、当然ですが「テーブルが無い」というエラーになります。
3 テーブル作成
それではという事で、Azureのポータル画面からテーブルを作成します。(テーブル名はクラス名と一致させます)
メニューから作成したテーブルは、Idなどいくつかの列が自動で追加されています。
4 列の自動生成
本来は、次に列を手動で追加するところなのですが、このままアクセスしてみると・・・
不思議なことに、エラーなくアクセスできてしまいます。(画面は、データの追加ができている様子)
管理画面からデータを参照すると、ちゃんと列が生成され、データが格納されていました。
そう、コードファーストで、列は自動的に作成されるのでした。
4 動作確認
いくつかのデータが格納された状態で、動作を確認してみました。
・クラス定義で、新しいプロパティを追加すると、自動的に列が増え、以前のデータの当該列はNULLとなりました。
・クラス定義でプロパティを削除しても、列は、そのまま残されていました。
そう、クラス定義(プロパティの名前など)を変更していくと、ゾンビとなった列が残ってしまうのですね・・・
この仕様を知らないで、作業してるいると、予想外にNULLが入った以前のデータを飲み込んでしまったりと、嵌りどころが想像されます。
また、リリース前に、いったんテーブルを再構築せよって事でしょうか。
【追記】
初音玲さんから、教えて頂きました。
この列の自動生成は、管理ポータルの「動的スキーマ」でオフにできると言う事でした。
Mobile Serviceで自動的に列を追加させない設定 - はつねの日記
しかし、このブログのエントリ今日付けなんですよね。
Facebookで気軽に質問してしまったら、瞬殺でプログのエントリを上げて返信するってっパネす。