J'ai un projet Silverlight 4 utilisant WCF RIA Services RTM. La plupart des fonctionnalités RIA fonctionnent, mais j'ai un problème avec la vérification de la concurrence. Le serveur vérifie correctement la concurrence et transmet une exception DomainOperationException à l'événement DomainDataSource.SubmittedChanges. Je gère cela même et en énumérant les EntitiesInError. J'appelle ensuite un Resolve sur le EntityConflict. Cela semble mettre à jour les "anciennes valeurs" pour les entités afin que je puisse ensuite les soumettre à nouveau, mais les changements du client sont conservés dans l'entité. Je préférerais effacer les changements du client et les inciter à les refaire, ou éventuellement leur montrer ce qui a changé et les laisser choisir ce qu'ils veulent garder. Voici un exemple de code de ce que j'ai jusqu'ici. J'ai trouvé cet article: http://sklementiev.blogspot.com/2010/03/wcf-ria-and-concurrency.html mais il ne semble pas fonctionner avec les services RIA RTM. Merci.Résoudre les erreurs de simultanéité sur le client Silverlight avec les services WCIA RIA
Exemple de code:
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