Your issue is not one that transactions solve. Transactions act as a wrapper around a number of operations, which either all succeed or all fail when you attempt to commit them. The problem you are trying to solve is one of concurrency. You just need to decide on a concurrency strategy. "Last in wins" is usually good enough for most CRUD systems - there is normally only one version of the truth, but your situation may require a different approach.
Other strategies are Optimistic Concurrency and Pessimistic concurrency:
From this page (http://msdn.microsoft.com/en-us/library/cs6hb8k4(v=vs.80).aspx)
Types of Concurrency Control
In general, there are three common ways to manage concurrency in a database:
- Pessimistic concurrency control: A row is unavailable to users from the time the record is fetched until it is updated in the database.
- Optimistic concurrency control: A row is unavailable to other users only while the data is actually being updated. The update examines
the row in the database and determines whether any changes have been
made. Attempting to update a record that has already been changed
results in a concurrency violation.- "Last in wins": A row is unavailable to other users only while the data is actually being updated. However, no effort is made to compare updates against the original record; the record is simply written out, potentially overwriting any changes made by other users since
you last refreshed the records.