Let's say I have to change the salesrep (foreign key) of 500 customer, and if I use transaction, will each customer "change" to remote server happen individually or do they get packaged up as on large transaction from client and then sent to the SE for processing?
There are a couple of ways that you might do this. The first would be to loop through a BO and update each rep. I think the only transaction support you'd get would be for each individual update. However, this is almost always a bad idea.
The better way is to use a sql statement, which is usually infinitely faster and the entire change can be wrapped in a transaction. For this method to work, you'd need to be able to select the 500 customers that need changing some how, via sql. I.e. they all had another rep and now need a different one or maybe they are in certain zip codes and need to be assigned to a rep. The update is then trivial:
-- T-SQL
-- customers is the customers table to be udpated
Update customers
Set repID = @repID
Where repID = @oldRepID -- in this case we are reassign the customers from one rep to another
Now, where do you execute this sql. There are two main options: call a sproc that does this work, or execute the sql directly. In either case, I'd likely create a method on the customer BO and pass it the new repid and the old rep ID (or whatever data is needed to select the reps to update) and execute the sproc/sql using the ExecuteNonQuery() method. Then you could wrap this single statement into a transaction (still within the BO method). The transaction is thus the updating of ALL the customers (only a single sql statement). All the logic is encapsulated within the BO, the server does the work, life is good
This works the same with or without SE.
This will be VERY fast (assuming appropriate indexes on the fields used in the where clause), compared to handling each customer on the client side individually (each update will be a call to the database...500 customers, 500 calls). If you are updating a gagillion customers, you can do it asynch, no problem...the work is actually being done on the server (assuming the server isn't on the same machine).
Hope this makes sense.