У меня есть проект Silverlight 4, использующий WCF RIA Services RTM. Большая часть функциональности RIA работает, но у меня проблема с проверкой параллелизма. Сервер правильно проверяет параллелизм и передает исключение DomainOperationException в событие DomainDataSource.SubmittedChanges. Я занимаюсь этим даже и перечисляю EntitiesInError. Затем я вызываю Resolve для EntityConflict. Похоже, что это обновляет «старые значения» для сущностей, поэтому я могу повторно отправить их, но изменения клиента сохраняются в сущности. Я бы предпочел стереть изменения клиента и заставить их заново сделать их, или, возможно, в конечном итоге показать им, что изменилось, и позволить им выбрать, что оставить. Ниже приведен пример кода того, что у меня есть. Я нашел этот пост: http://sklementiev.blogspot.com/2010/03/wcf-ria-and-concurrency.html, но, похоже, он не работает с RIA Services RTM. Спасибо.
Пример кода:
Private Sub dds_SubmittedChanges(ByVal sender As Object, ByVal e As System.Windows.Controls.SubmittedChangesEventArgs)
If e.HasError Then
If TypeOf e.Error Is DomainOperationException Then
handleDomainOperationException(sender, e, "myType")
End If
End If
End Sub
Private Sub handleDomainOperationException(ByVal sender As Object, ByVal e As SubmittedChangesEventArgs, ByVal entityType As String)
Dim dds As DomainDataSource = DirectCast(sender, DomainDataSource)
Select Case DirectCast(e.Error, DomainOperationException).Status
Case OperationErrorStatus.Conflicts
ErrorWindow.CreateNew(String.Format("Another user updated this {0} between the time that you viewed it and when you submitted your changes. Your changes have been reverted. Please make your changes again and re-submit.", entityType))
For Each ent In e.EntitiesInError
If Not ent.EntityConflict.IsDeleted Then
'tried this, doesn't overwrite changes, just updates old fields
ent.EntityConflict.Resolve()
Else
Throw New Exception("This entity has already been deleted.")
End If
Next
e.MarkErrorAsHandled()
Case OperationErrorStatus.ValidationFailed
ErrorWindow.CreateNew("Data validation failed")
End Select
End Sub