public void SaveExpense(Expense expense) { var context = new ExpenseDataContext(this.account); ExpenseEntity expenseRow = expense.ToTableEntity(); foreach (var expenseItem in expense.Details) { var expenseItemRow = expenseItem.ToTableEntity(expenseRow.PartitionKey, expense.Id); context.AddObject(AzureStorageNames.ExpenseTable, expenseItemRow); } context.AddObject(AzureStorageNames.ExpenseTable, expenseRow); context.SaveChanges(SaveChangesOptions.Batch); foreach (var expenseItem in expense.Details) { // save receipt image if any if (expenseItem.Receipt != null && expenseItem.Receipt.Length > 0) { this.receiptStorage.AddReceipt(expenseItem.Id, expenseItem.Receipt, string.Empty); var queue = new AzureQueue<NewReceiptMessage>(this.account, AzureStorageNames.NewReceiptMessage); queue.AddMessage(new NewReceiptMessage { ExpenseItemId = expenseItem.Id, ExpenseId = expense.Id, Username = expense.UserName }); } } }