public static void ConcurrentUpdates() {
// ...
Northwind db2 = new Northwind(Connections.ConnectionString);
var customer2 = db2.Customers.Single(c => c.CustomerID == "FRANS");
customer2.ContactName = "Paolo Pialorsi";

for (int retry = 1; retry < 4; retry++) {
Console.WriteLine("Pokus slo {0}", retry);

try {
db2.SubmitChanges(); // vyvoln vjimky
break; // Ukonen smyky, pokud se povede uloit zmny.
}
catch (ChangeConflictException ex) {
Console.WriteLine(ex.Message);
DisplayChangeConflict(db2);
db2.Refresh(RefreshMode.KeepChanges,customer2);
}
}
// ...
}

private static void DisplayChangeConflict(Northwind db) {
foreach (ObjectChangeConflict occ in db.ChangeConflicts) {
MetaTable metatable = db.Mapping.GetTable(occ.Object.GetType());
Customer entityInConflict = occ.Object as Customer;

Console.WriteLine(
"Tabulka={0}, IsResolved={1}",
metatable.TableName, occ.IsResolved);
foreach (MemberChangeConflict mcc in occ.MemberConflicts) {
object currVal = mcc.CurrentValue;
object origVal = mcc.OriginalValue;
object databaseVal = mcc.DatabaseValue;
MemberInfo mi = mcc.Member;
Console.WriteLine("len: {0}", mi.Name);
Console.WriteLine("aktuln hodnota: {0}", currVal);
Console.WriteLine("pvodn hodnota: {0}", origVal);
Console.WriteLine("databzov hodnota: {0}", databaseVal);
}
}
}
