2009-09-29 10 views
2

Je cetteRollback avec linq à sql?

Public void CreateUser(params here) 
{ 
    CreateMembership(params here); 
    Users newUser = new Users(); 
    newUser.UserId = 123456 
    Context.Users.insertOnSubmit(); 
    Context.Submit(); 
} 

public void CreateMembership(...) 
{ 
    Membership membership = new Membership(); 
    membership.Something = "something"; 
    Context.Membership.insertOnSumbit(); 
    Context.Submit(); 
} 

Alors ce qui se passe si la table des utilisateurs soumettent échoue comment puis-je Rol ce retour à supprimer les trucs d'adhésion? Ou puis-je configurer mon truc différemment comme ne supprimer que la ligne Context.Submit() de la méthode Membership?

Ensuite, un seul Submit est appelé? Ou dois-je faire autre chose?

Répondre

5

IMO, vous devez seulement appeler soumettre une fois.

Sinon, j'ai une méthode pour «effacer» les modifications en attente.

Regardez here.

+0

Eh bien, si je comprends bien si elle échoue sur le premier insert (je suppose qu'il irait dans l'ordre donc l'adhésion). Il ne sera pas ajouté et il n'exécutera jamais l'utilisateur. Ce script est-ce que je l'appelle juste ou quelque chose? – chobo2

+0

Oh est-ce que j'utilise insertOnSubmit ou InsertAllOnsubmit()? Je ne suis pas sûr de ce qu'est le diff. – chobo2

+0

Un si pour un seul objet, l'autre pour une liste d'objets. – leppie

2

Vous appelez uniquement l'envoi après que toutes les modifications que vous souhaitez regroupées en une seule transaction soient appliquées au contexte LINQToSQL.

Essentiellement, supprimez le Context.Submit(); de la fonction CreateMembership, et vous obtiendrez le résultat que vous recherchez.

+0

Cool Thats ce que je pensais rend la chose simple, probablement plus rapide aussi. – chobo2

7

L'utilisation de TransactionScope devrait être ma suggestion. Il va revenir en arrière, si des exceptions sont générées par la méthode SubmitChanges().