Свойство DataContext.ChangeConflicts
Получает коллекцию объектов, представляющих расхождения между значением текущего клиента и текущее значение поля в элементе списка базы данных.
Пространство имен: Microsoft.SharePoint.Linq
Сборка: Microsoft.SharePoint.Linq (в Microsoft.SharePoint.Linq.dll)
Синтаксис
'Декларация
Public Property ChangeConflicts As ChangeConflictCollection
Get
Friend Set
'Применение
Dim instance As DataContext
Dim value As ChangeConflictCollection
value = instance.ChangeConflicts
public ChangeConflictCollection ChangeConflicts { get; internal set; }
Значение свойства
Тип: Microsoft.SharePoint.Linq.ChangeConflictCollection
ChangeConflictCollection всех членов, представляет несоответствие.
Замечания
По крайней мере один член свойства также представляет конфликт параллелизма, обнаруженного при последнем вызове SubmitChanges() . ChangeConflicts не заполняется, если не было по крайней мере один конфликт параллелизма: несоответствие между текущей базы данных значение поля и значение, что и во время последнего извлечения текущим процессом. Если обнаруживается конфликт, SubmitChanges() также заполняет ChangeConflicts с объектами, представляющими расхождений текущее значение клиента и значение текущей базы данных.
Как правило код будет перехватывать ChangeConflictException и устранения расхождений в ChangeConflicts в блоке catch (Catch в Visual Basic).
Примеры
Ниже приведен пример использования свойства ChangeConflicts в блоке catch .
foreach (TeamMember teamMember in teamSite.TeamMembers)
{
teamMember.TopTask = "Fiscal Planning";
}
try
{
teamSite.SubmitChanges(ConflictMode.ContinueOnConflict);
}
catch (ChangeConflictException e)
{
foreach (ObjectChangeConflict changedListItem in teamSite.ChangeConflicts)
{
// If another user has changed properties of a non-manager,
// leave that other user’s changes, except for the TopTask field.
if (((TeamMember)changedListItem.Object).IsManager = false)
{
foreach (MemberChangeConflict changedField in changedListItem.MemberConflicts)
{
if (changedField.Member.Name == "TopTask")
{
changedField.Resolve(RefreshMode.KeepCurrentValues);
}
else
{
changedField.Resolve(RefreshMode.OverwriteCurrentValues);
}
}
}
// But if another user has changed properties of a manager, let this
// process’s changes override the other user’s changes.
else
{
changedListItem.Resolve(RefreshMode.KeepCurrentValues);
}
}
teamSite.SubmitChanges();
} // end catch
For Each teamMember As TeamMember In teamSite.TeamMembers
teamMember.TopTask = "Fiscal Planning"
Next teamMember
Try
teamSite.SubmitChanges(ConflictMode.ContinueOnConflict)
Catch e As ChangeConflictException
For Each changedListItem As ObjectChangeConflict In teamSite. ChangeConflicts
' If another user has changed properties of a non-manager,
' leave that other user’s changes, except for the TopTask field.
If Not (CType(changedListItem.Object, TeamMember)).IsManager Then
For Each changedField As MemberChangeConflict In changedListItem.MemberConflicts
If changedField.Member.Name = "TopTask" Then
changedField.Resolve(RefreshMode.KeepCurrentValues)
Else
changedField.Resolve(RefreshMode.OverwriteCurrentValues)
End If
Next changedField
' But if another user has changed properties of a manager, let this
' process’s changes override the other user’s changes.
Else
changedListItem.Resolve(RefreshMode.KeepCurrentValues)
End If
Next changedListItem
teamSite.SubmitChanges()
End Try ' end catch