public class StorageTableBatchUpdate<T> : IDisposable where T : ITableEntity, new()
{
private CloudTable tbl;
private TableBatchOperation tbo = new TableBatchOperation();
private const int limit = 100;
public TableQuery<T> Query
{
get { return tbl.CreateQuery<T>(); }
}
public void AddObject(T targetToAdd)
{
exec(TableOperation.InsertOrReplace(targetToAdd));
}
public void UpdateObject(T targetToUpdate)
{
exec(TableOperation.Replace(targetToUpdate));
}
public void DeleteObject(T found)
{
exec(TableOperation.Delete(found));
}
public StorageTableBatchUpdate(StorageTable<T> table)
{
tbl = Util.CTC.GetTableReference(table.TableName);
}
private void exec(TableOperation op)
{
tbo.Add(op);
if (tbo.Count() >= limit) exec();
}
private void exec()
{
tbl.ExecuteBatch(tbo);
tbo.Clear();
}
public void Dispose()
{
if (tbo.Count() > 0) exec();
}
}