2009-07-28 12 views
2

次の方法を使用してWindows Azureでテーブルを作成しています。アプリケーションは、私が更新(例:新規列)私は、テーブルにしたい持っている場合、どのように私は、既存のを失うことなく、それらの更新を行う行くのですWindows Azureでテーブルを変更する

TableStorage.CreateTablesFromModel(typeof(customDataServiceContext), account); 

を最初に初期化されるとき、このコードは一度だけ実行されますデータ?

答えて

3

エンティティを表すために使用するCLRクラスを新しいフィールドで更新するだけです。テーブルサービス自体はスキーマレスなので、気になるのはテーブルのです。これはCLRタイプの名前です。

テーブルが既に存在するため、CreateTablesFromModelを再度呼び出す必要はありません。ただし、新しいテーブルを追加すると、そのようになります。あなたの古いテーブルはこれによって影響を受けません。すでに存在するテーブルはそのまま残されます。

すでにテーブルに存在するエンティティを取得すると、新しい列の値はnullになります。

+0

私は.CreateTableFromModel関数を再度呼び出しますか?だから、あなたが言っているのは、スキーマの変更が行われたときに呼び出すことができ、例外をスローしたり、既存のデータを削除したりすることができないということです。 –

+0

モデルに新しい型を追加するときにのみ、CreateTablesFromModelを呼び出す必要があります。既存のテーブルは影響を受けません – Rik

1

リックは最も重要な概念を正しく述べています。アズールテーブルストレージにはスキーマがありません。ストレージシステム自体については、エンティティセット(テーブル)に格納する内容を変更したい場合は、何もする必要はありません。もちろん、異なるスキーマを持つエンティティ(行)を格納している場合は、その違いを処理するビジネスロジックを準備する必要があります。たとえば、変更した値に応じて、NULL値または異なるデータ型を処理する必要があります。

この場合、システムはエンティティセット(テーブル)の存在を知る必要があり、その内容についてはまったく気にしません。これは、格納しているエンティティのスキーマを変更するときに.CreateTableFromModelを呼び出す必要がない理由です。

私の意見では、Azureの人々は、実際には「エンティティセット」を意味するときに用語「テーブル」を使用して開発者を混乱させます。表は、開発者を固定スキーマと列で精通した道に導きます。あなたは本当にエンティティがエンティティ(プロパティバッグ)のコンテナを設定すると考えるべきです。エンティティがPartitionKey、RowKey、およびModifiedDate(?)の各プロパティを含んでいなければなりません。

私が言ったことはすべて、雲のAzure Table Storageの実際の施設に当てはまることです。開発者ストレージの現在の実装は、実際のSQLデータベースで構築されたクラウドのローカルシミュレーションです。つまり、開発ストレージを使用する場合は、実際にエンティティセットに固定スキーマを使用するように制限されます。これは、開発ストレージの現実のシミュレーションでは重要な欠点であり、厄介です。