2

次の方法を使用して、WindowsAzureでテーブルを作成しています。このコードは、アプリケーションが最初に初期化されたときに1回だけ実行されます

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

テーブルに加えたい更新(新しい列など)がある場合、既存のデータを失うことなくそれらの更新を行うにはどうすればよいですか?

4

2 に答える 2

3

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

テーブルはすでに存在するため、CreateTablesFromModelを再度呼び出す必要はありません。ただし、新しいテーブルを追加する場合は追加します。古いテーブルはこれによる影響を受けません。すでに存在するテーブルはそのままにしておきます。

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

于 2009-07-28T13:33:28.180 に答える
1

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

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

私の意見では、Azure の人々は、実際には「エンティティ セット」を意味するときに「テーブル」という用語を使用して、開発者を混乱させています。Table は、固定されたスキーマと列を使用して、開発者をおなじみのメンタル パスに導きます。エンティティ セットは、エンティティのコンテナー (プロパティ バッグ) と考える必要があります。強制される唯一の要件は、各エンティティに PartitionKey、RowKey、および ModifiedDate (?) のプロパティが含まれている必要があることです。

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

于 2009-08-23T12:53:16.427 に答える