Azureテーブルストレージを使用していますが、エンティティのnullとデフォルト値がどのように機能するかについて質問があります。
具体的には、を拡張するクラスがありますTableServiceEntity
。このクラスのデフォルトコンストラクタは、次のようなさまざまなプロパティのデフォルト値を設定しています。
public class MyEntity: TableServiceEntry
{
public MyEntity() : MyEntity("invalid", "invalid") {}
public MyEntity(string f1, string f2)
{
Field1 = f1;
Field2 = f2;
}
public string Field1 { get; set; }
public string Field2 { get; set; }
}
次のエンティティを作成して、このクラスをローカルで(エミュレーターで)テストしました。
MyEntity e = new MyEntity("hello", null);
エンティティをアップロードしてからローカルで取得すると、予想どおり、2つのフィールドがそれぞれ「hello」とnullに設定されました。
ただし、同じエンティティをAzureクラウドにアップロードしたときに返されるのは、2つのプロパティでそれぞれ「hello」と「invalid」でした。
エンティティを保存する私のコードは以下のとおりです。
public class MyTable : TableServiceContext
{
...
public void AddEntry(MyEntity e)
{
this.AddObject("MyTable", e);
this.SaveChangesWithRetries(SaveChangesOptions.ReplaceOnUpdate);
}
}
デフォルトのコンストラクターに引数をとらせないことでこれを修正することができましたが、テーブルストレージがどのように機能するかについて根本的な誤解を持っているように感じます。TableServiceEntryのプロパティにデフォルトを指定すると、それらがクラウド内のテーブルの各行のデフォルトになりますが、エミュレーター(つまり、クラウドとSQL Express)ではデフォルトになりませんか?もしそうなら、なぜ私はそれらのデフォルトをnull
クラウドでオーバーライドできないのですか?null
Azureテーブルストレージでデフォルトのコンストラクターとがどのように機能するかを説明するドキュメントはありますか?