我有一个继承自Table Entity的抽象类。
public abstract class AzureEntityBase : TableEntity
{
public AzureEntityBase()
{
}
public virtual string TableName
{
get
{
return string.Empty;
}
}
private string ObjectHash { get; set; }
public bool IsBackedUp { get; set; }
}
然后我有一个实现这个抽象类的类
public class DepartmentTotalEntity : AzureEntityBase
{
public override string TableName
{
get
{
return "DepartmentTotals";
}
}
public Int64 SessionDateTimeInteger { get; set; }
public string StoreID { get { return PartitionKey; } set { PartitionKey = value; } }
public string DetailKey { get; set; }
public string RangeString { get; set; }
public string DateStart { get; set; }
public string DateEnd { get; set; }
public Int64 DateStartInt { get; set; }
public Int64 DateEndInt { get; set; }
public string Dept_ID { get; set; }
public string DepartmentDescription { get; set; }
public decimal Quantity { get; set; }
public decimal TotalPrice { get; set; }
}
我将修改后的实体提交到Azure表存储,并将IsBackedUp值设置为false。 然后,我有一个在Azure Compute实例上运行的服务,该实例将行从一个表存储帐户复制到另一个表存储帐户。另一个Azure表存储帐户位于不同的Azure数据中心。在复制了所有行之后,我想限制我在复制下一轮时所抓取的内容,并且IsBackedUp字段应该这样做。
我运行一个循环已经插入的行的函数,检查它们是否存在于目标中,如果它们存在,则更新源表行以反映它已备份并通过以下内容写入azure代码。
foreach (DepartmentTotalEntity row in CopiedRows)
{
DepartmentTotalEntity find = dst.BrowseSingle(row.PartitionKey, row.RowKey);
if (find != null)
{
row.IsBackedUp = true;
int tmp = src.InsertOrReplace(row);
}
}
InsertOrReplace的返回整数是tableoperation的HttpStatusCode,它总是读取204.这对于成功写入ATS是可取的。
为了完整性,这里是InsertOrReplaceRow函数。
public int InsertOrReplace(DepartmentTotalEntity input)
{
if (input.PartitionKey.IsNull())
{
throw new ArgumentNullException("PartitionKey");
}
if (input.RowKey.IsNull())
{
throw new ArgumentNullException("RowKey");
}
TableOperation replaceOperation = TableOperation.InsertOrReplace(input);
TableResult result = table.Execute(replaceOperation);
return result.HttpStatusCode;
}
主要问题是在第三个代码块中调用InsertOrReplace命令时,IsBackedUp字段没有被更新。
在这里试着弄清楚为什么ATS不会接受我的修改。
我可以使用Azure Table Storage Explorer成功更改IsBackedUp的值。我已经确认该列的数据类型是布尔值。
非常感谢任何帮助。如果我已经发布了足够的代码来帮助我,请告诉我。唯一没有发布的类是围绕最后一个代码块的类的其余部分。它超过2000行,所以为了简洁我省略了它。该类具有CloudTable,CloudTableClient和CloudStorageAccount变量。