保护模拟运算表并使其不受应用错误的影响
2010-06-21 00:00:00 来源:WEB开发网BackupTableRange建立了一个会扫描指定密钥范围的查询,然后援引下列BackupToContainer。我们使用 BackupEntity类来读取结果。BackupEntity保存了一个内部XElement,XElement名为EntryElement,它将接收到的一个用于实体数据的原始OData XML保存在查询响应中。为了掌握这个原始数据,我们可以使用所示代码中的ReadingEntity事件。ResolveType代表用来提供类型名称,而WCF数据服务客户会使用此类型名称。
/// <summary>
/// Create a query that will scan the assigned range and save it to a blob in the given container
/// </summary>
/// <param name="tableClient"></param>
/// <param name="container"></param>
/// <param name="tableName"></param>
/// <param name="range"></param>
/// <param name="backupId"></param>
private static void BackupTableRange(
CloudTableClient tableClient,
CloudBlobContainer container,
string tableName,
PartitionKeyRange range,
string backupId)
{
TableServiceContext context = tableClient.GetDataServiceContext();
context.MergeOption = MergeOption.NoTracking;
context.ResolveType = TableBackup.ResolveType;
context.ReadingEntity += new EventHandler<ReadingWritingEntityEventArgs>(TableBackup.OnReadingEntity);
context.RetryPolicy = RetryPolicies.RetryExponential(5, RetryPolicies.DefaultClientBackoff);
var query = from entity in context.CreateQuery<BackupEntity>(tableName) select entity;
if (range.Min != null)
{
query = query.Where(entity => entity.PartitionKey.CompareTo(range.Min) >= 0);
}
if (range.Max != null)
{
query = query.Where(entity => entity.PartitionKey.CompareTo(range.Max) < 0);
}
CloudTableQuery<BackupEntity> cloudQuery = new CloudTableQuery<BackupEntity>((DataServiceQuery<BackupEntity>)query);
BackupToContainer(container, cloudQuery, backupId, range);
}
/// <summary>
/// Entities used for backup/restore
/// </summary>
[DataServiceKey("PartitionKey", "RowKey")]
public class BackupEntity
{
public string PartitionKey { get; set; }
public string RowKey { get; set; }
/// <summary>
/// Used during restore to store the entry element.
/// </summary>
internal XElement EntryElement { get; set; }
}
static void OnReadingEntity(object sender, ReadingWritingEntityEventArgs args)
{
BackupEntity entity = args.Entity as BackupEntity;
entity.EntryElement = args.Data;
}
static Type ResolveType(string entityName)
{
return typeof(BackupEntity);
}
赞助商链接