[转]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);
}
}