2

J'ai appris comment configurer des transactions dans Entity Framework en utilisant TransactionScope dans une autre de mes questions. Cependant il me confond toujours! Je veux dire comment les services RIA exécutent-ils des transactions et comment pouvons-nous spécifier des options de transaction? Je veux dire, supposons que le client Silverlight nous précisons quelque chose comme ceci: -Comment les services ria gèrent les transactions

someContext.Add(someEntity1); 
someContext.Add(someEntity2); 
someContext.Add(someEntity3); 

Maintenant quand j'appelle someContext.SubmitChanges() cela va appeler InsertSomeEntity() sur le serveur dans ma classe de service de domaine. Quelle est la garantie que tous les trois enregistrements seront insérés dans la base de données et si l'un échoue, tous échoueront? Et comment pouvons-nous changer ces options?

+1

espérons que cela aidera http://bit.ly/fbwR85 – Hukam

+0

Vous devrez également prendre en compte les problèmes de simultanéité. WCF RIA rend votre vie intéressante. Un point de départ pour la lecture est http://sklementiev.blogspot.com/2010/03/wcf-ria-and-concurrency.html. Le code est un peu vieux et ne fonctionne plus seulement mais c'est un bon endroit pour lire une approche. – Rus

Répondre

5

Le lien de Chand est un bon exemple. WCF RIA soumettra un ChangeSet pour les SubmitChanges contenant les 3 Adds. Dans votre DomainService, vous pouvez remplacer la méthode PersistChanges pour terminer la transaction.

public class SomeEntityDomainService : DomainService 
{ 
    SomeEFContext _someEFContext; 
    public SomeEntityDomainService() 
    { 
     _someEFContext = new SomeEFContext(); 
    } 

    public void InsertSomeEntity(SomeEntity someEntity) 
    { 
     // Called 3 times in your example 
     _someEFContext.SomeEntities.Add(someEntity); 
    } 

    protected override bool PersistChangeSet() 
    { 
     // Called exactly once per SubmitChanges() in Silverlight 
     _someEFContext.SaveChanges(); 
    } 
} 

Tout cela se produit dans une requête du client au serveur, pas 3 demandes.

Questions connexes