【发布时间】:2022-12-09 02:06:11
【问题描述】:
我正在将代码从 Microsoft.WindowsAzure.Storage.Table 迁移到 Azure.Data.Tables。所描述的问题出现在查询内容与数据类型不匹配的实体上。考虑以下迁移代码的 sn-p:
public class WorkstationInfoTableEntity : Azure.Data.Tables.ITableEntity
{
//ITableEntity
public string PartitionKey { get; set; }
public string RowKey { get; set; }
public DateTimeOffset? Timestamp { get; set; }
public ETag ETag { get; set; }
//
public byte[] Documents { get; set; }
public DateTime? MyDocumentsLastRestoreDate { get; set; }
public DateTime? MyDocumentsModifiedOn { get; set; }
....
//
}
var table = tableServiceClient.GetTableClient(CloudTableNames.Workstations);
var workstations = table.Query<WorkstationInfoTableEntity>(c => c.PartitionKey == customerId);
var results = workstations.OrderBy(c => c.Name).ToArray();
如果表包含一个包含一些字符串的实体:“[RME]”(任何非 base64 字符串) 在里面文件列然后查询将失败抱怨:
"System.FormatException: 'The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters."
因为它需要一个 base64 字符串,但值只是一些字符串。
或者,如果 MyDocumentsModifiedOn 列中包含一些空字符串,则查询会因错误而崩溃:
"System.FormatException: 'String was not recognized as a valid DateTime."
如果出现反序列化问题,Microsoft.WindowsAzure.Storage.Table 库将使用空值填充该属性。
预期是一个实体列表,其反序列化失败的属性设置为 null。 实际行为:代码崩溃
如果出现任何反序列化问题,有什么方法可以防止崩溃吗?
现在,不可能纠正这些实体。
【问题讨论】:
标签: c# azure-table-storage azure-tablequery azure-tableclient