我正在使用 Azure 表存储,并且对实体的空值和默认值如何工作有疑问。
具体来说,我有一个扩展类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);
我上传了实体,然后在本地检索它,这两个字段分别设置为“hello”和 null,正如预期的那样。
但是,当我将同一个实体上传到 Azure 云时,我收到的回复分别是两个属性的“hello”和“invalid”。
我保存实体的代码如下:
public class MyTable : TableServiceContext
{
...
public void AddEntry(MyEntity e)
{
this.AddObject("MyTable", e);
this.SaveChangesWithRetries(SaveChangesOptions.ReplaceOnUpdate);
}
}
我可以通过使默认构造函数不带参数来解决这个问题,但现在我觉得我对表存储的工作原理有一个基本的误解。当您为 TableServiceEntry 的属性指定默认值时,这些属性是否会成为云中表中每一行的默认值,而不是在模拟器中(即云与 SQL Express)?如果是这样,为什么我不能null
在云中覆盖这些默认值?是否有任何文档解释默认构造函数和null
s 如何在 Azure 表存储中工作?