[转]LINQ SubmitChanges方法 (并发处理)

// 如果主键也并发修改了,会报错

用数据库的新值回添客户端

try

{

// 表示即使发生冲突也要继续

a.SubmitChanges(System.Data.Linq.ConflictMode.ContinueOnConflict);

// 表示只要发生冲突就不再继续

// a.SubmitChanges(System.Data.Linq.ConflictMode.FailOnFirstConflict);

// a.SubmitChanges();

}

catch (System.Data.Linq.ChangeConflictException ex)

{

foreach (System.Data.Linq.ObjectChangeConflict occ in a.ChangeConflicts)

{

DBItem p = (DBItem)occ.Object;

// 以当前客户端中的值为准

//occ.Resolve(System.Data.Linq.RefreshMode.OverwriteCurrentValues);

// 以当前数据库中的值为准

// occ.Resolve(System.Data.Linq.RefreshMode.KeepCurrentValues);

// 如果数据库中的值没有发生变化,则以当前客户端中的值为准。否则,则以当前数据库中的值为准

//occ.Resolve(System.Data.Linq.RefreshMode.KeepChanges);

foreach (System.Data.Linq.MemberChangeConflict mcc in occ.MemberConflicts)

{

// 当前客户端中的值

string currentValue = mcc.CurrentValue.ToString();

// 原来数据库中的值

string originalValue = mcc.OriginalValue.ToString();

// 当前数据库中的值

string databaseValue = mcc.DatabaseValue.ToString();

Console.WriteLine("当前客户端中的值:{0},原来数据库中的值:{1},当前数据库中的值:{2}", currentValue, originalValue, databaseValue);

// 以当前客户端中的值为准

mcc.Resolve(System.Data.Linq.RefreshMode.OverwriteCurrentValues);

// 以当前数据库中的值为准

// mcc.Resolve(System.Data.Linq.RefreshMode.KeepCurrentValues);

// 如果数据库中的值没有发生变化,则以当前客户端中的值为准。否则,则以当前数据库中的值为准

// mcc.Resolve(System.Data.Linq.RefreshMode.KeepChanges);

}

}

posted @ 2012-08-28 13:56  zhcnblog  阅读(690)  评论(0编辑  收藏  举报