Register   |  Login
  Search
All samples    Sample 1    Sample 2    Sample 2.1    Sample 3     Sample 4    Sample 5    Sample 5.1   

Sample 5.1. Using transactions and request canceling (proxy classprovided by Visual Studio\svcutil).

  • Click "Load" using datumnode/datumnode as username/password
  • Edit a row in the Customer grid
  • Edit rows in the Orders grid
  • Select rows in the Orders grid to update
  • Click "Update Rows"
  • Click "Load"


private void button2_Click(object senderRoutedEventArgs e)
{
	var customer = dataGrid1.SelectedItem as Customer.getEntity;
	if (customer != null)
	{
		button2.IsEnabled = true;
		button3.IsEnabled = false;
 
		var orders = dataGrid2.SelectedItems != null && dataGrid2.SelectedItems.Count > 0 ?
			dataGrid2.SelectedItems.Cast<Customer.getOrdersEntity>().ToList() : null;
 
		var datumnode = new DatumNode.DatumNodeClient();
		_cancelled = false;
		_channel = datumnode;
		_id = 0;
 
		datumnode.OpenCompleted += (sargs=> OnUpdateRequestExecuted(args, () =>
		{
			_id = args.Result;
			UpdateCustomer(customerorders);
		});
 
		datumnode.OpenAsync(null);
	}
}
 
private void UpdateCustomer(Customer.getEntity customerIEnumerable<Customer.getOrdersEntity> orders)
{
	var client = new Customer.customerClient();
	_channel = client;
 
	client.updateCompleted += (sargs=> OnUpdateRequestExecuted(args, () => UpdateOrders(orders));
 
	client.updateAsync(new Customer.updateRequest
	{
		Id = _id,
		Command = new Customer.MetaCommand
		{
			Operation = Customer.DbOperation.ExecuteNonQuery,
			Transaction = Customer.DbTransaction.BeginLocal
		},
		Parameters = new Customer.updateInputParameters
		{
			CustomerId = customer.CustomerID,
			Address = customer.Address,
			City = customer.City,
			CompanyName = customer.CompanyName,
			ContactName = customer.ContactName,
			ContactTitle = customer.ContactTitle,
			Country = customer.Country,
			Fax = customer.Fax,
			Phone = customer.Phone,
			PostalCode = customer.PostalCode,
			Region = customer.Region
		}
	});
}
 
private void UpdateOrders(IEnumerable<Customer.getOrdersEntity> orders)
{
	if (orders == null)
	{
		Commit();
		return;
	}
 
	var client = new Order.orderClient();
	_channel = client;
 
	client.updateCompleted += (sargs=> OnUpdateRequestExecuted(argsCommit);
 
	client.updateAsync(new Order.updateRequest
	{
		Id = _id,
		Command = new Order.MetaCommand
		{
			Operation = Order.DbOperation.ExecuteBatch
		},
		BatchParameters = new Order.updateInputBatchParameters
		{
			OrderID = orders.Select(o => o.OrderID).ToArray(),
			OrderDate = orders.Select(o => o.OrderDate).ToArray(),
			RequiredDate = orders.Select(o => o.RequiredDate).ToArray(),
			ShippedDate = orders.Select(o => o.ShippedDate).ToArray()
		}
	});
}

Full source code