モデルを作成するとします
public class Foo :TableEntity {
public int OriginalProperty {get;set;}
}
次に、次のようなコードでOriginalPropertyの値を定期的に更新するサービスをデプロイします...
//use model-based query
var query = new TableQuery<Foo>().Where(…);
//get the (one) result
var row= (await table.ExecuteQueryAsync(query)).Single()
//modify and write it back
row.OriginalProperty = some_new_value;
await table.ExecuteAsync(TableOperation.InsertOrReplace(row));
後で、別のサービスで使用するためにFooに新しいプロパティを追加することにしました。
public class Foo :TableEntity {
public int OriginalProperty {get;set;}
public int NewProperty {get;set;}
}
この変更をローカルで行い、元のデプロイされたサービスを更新せずに、ローカルマシンからいくつかのレコードの更新を開始します。
私が見ている動作は、デプロイされたサービスがレコードを更新するとすぐに、ローカルマシンからNewPropertyに加えた変更が失われることです。もちろん、これはいくつかの点で理にかなっています。サービスは、NewPropertyが追加されたことを認識せず、それを保持する理由がありません。ただし、TableEntityの実装は辞書ベースであると理解していたため、新しく導入された列を削除するのではなく、「無視」(つまり保持)することを望んでいました。
クエリ/挿入を構成して、必要な動作を取得する方法はありますか?DynamicTableEntityについては知っていますが、これを基本クラスとして使用すると、モデルプロパティの動作が変更されるかどうかは不明です。
明確にするために、モデルを継続的にいじったり、同じテーブルに複数のクライアントモデルを用意したりするのが良い習慣であることを示唆しているわけではありませんが、すべてを再デプロイすることを心配せずに、時々列を追加できることは間違いなく便利です。影響を受けるテーブルに触れる可能性のあるサービス。
InsertOrReplaceの代わりにInsertOrMergeを使用できます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加