Question : transactionscopes nichés

salut experts

see que le code du code below.
this obtient exécuté toutes les fois que je sauve une rangée ou une table au database.
A (entité (d'ISaveable)). Sauver () le ; la méthode peut également appeler des autres sauf () la méthode pour des tables d'enfant ou l'enfant rows.
so la méthode d'InternalUpdateEntity () a des périodes multiples appelées et les transactionscopes multiples sont used.

Now que je dois les questions/Problems.
1. ils toute l'utilisation le même transactionscope ou toujours un neuf et fait ceci semble même raisonnable. Est-ce qu'au cas où j'améliorer juste crée un transactionscope ?

2. quand j'obtiens une erreur de simultanéité dans un transactionscope niché. mon application jettera une exception transactionaborted, malgré le fait que j'attrape réellement exactement cette exception ? le
What a pu causer cela ?

thanks à l'avance pour votre help
I AM employant CONTRE 2008, C#, .NET 3.5, victoire Forms

class= > " clair " de
> de " codeSnippet " de class= de
class= " lineNumbers " de
class= de
1 :
2 :
3 :
4 :
5 :
6 :
7 :
8 :
9 :
10 :
11 :
12 :
13 :
14 :
15 :
16 :
17 :
18 :
19 :
20 :
21 :
22 :
23 :
24 :
25 :
26 :
27 :
28 :
29 :
30 :
31 :
32 :
33 :
34 :
35 :
36 :
37 :
38 :
39 :
40 :
41 :
42 :
43 :
44 :
45 :
46 :
47 :
48 :
49 :
50 :
51 :
52 :
53 :
54 :
55 :
56 :
57 :
58 :
59 :
60 :
61 :
62 :
63 :
64 :
65 :
66 :
67 :
68 :
69 :
70 :
71 :
72 :
73 :
74 :
75 :
76 :
77 :
78 :
79 :
80 :
81 :
82 :
83 :
84 :
>private " de l'id= " codeSnippet787896 de
 1 && rame [0]. Tableau ! = nulle)
                Entité = rangées [0]. Tableau ;
            autrement
                retour ;

            si (entité de && de vaeCollection.IsCollectionValid ! = nulle)
            {
                ConcurrencyError booléen = faux ;
                
                utilisation (solides totaux de TransactionScope = ((nulle de == de this.ParentTransaction) ? nouveau TransactionScope () : nouveau TransactionScope (this.ParentTransaction)))
                {
                    essai
                    {
                        si (nulle de == de this.ParentTransaction)
                            this.ParentTransaction = Transaction.Current.DependentClone (DependentCloneOption.BlockCommitUntilComplete) ;

                        si (== UpdateAction.Update d'UpdateAction)
                        {
                            si (l'entité est ISaveable || L'entité est ISaveMultipleRows)
                            {
                                si (l'entité est && d'ISaveMultipleRows Rows.Length > 1)
                                    (Entité (d'ISaveMultipleRows)). Économiser (rangées) ;
                                autrement
                                    (Entité (d'ISaveable)). Économiser () ;
                            }
                        }
                        autrement si (== UpdateAction.Delete d'UpdateAction)
                        {
                            si (l'entité est IDeleteable || L'entité est IDeleteMultipleRows)
                            {
                                si (l'entité est && d'IDeleteMultipleRows Rows.Length > 1)
                                {
                                    (Entité (d'IDeleteMultipleRows)) .DeleteObject (rangées) ;

                                    si (DoCommit)
                                        (Entité (d'IDeleteMultipleRows)) .CommitDeletedObject (rangées) ;
                                }
                                autrement
                                {
                                    (Entité (d'IDeleteable)) .DeleteObject () ;

                                    si (DoCommit)
                                        (Entité (d'IDeleteable)) .CommitDeletedObject () ;
                                }
                            }
                        }

                        Ts.Complete () ;
                    }
                    crochet (TransactionAbortedException ex)
                    {
                        si (this.DatabaseUpdateError ! = nulle)
                        {
                            ficeler le message = « Fehler \ r \ n » ;

                            si (ex.InnerException ! = nulle)
                                Message += ex.InnerException.Message + « \ r \ nStacktrace :  » + ex.InnerException.StackTrace ;
                            autrement
                                Message += ex. Message + « \ r \ nStacktrace :  » + ex.StackTrace ;

                            this.DatabaseUpdateError (nouvel ExceptionEventArgs (message));
                        }
                        autrement si (ex.InnerException ! = nulle)
                            jet ex.InnerException ;
                        autrement
                            jet ex ;
                    }
                    crochet (dex de DBConcurrencyException)
                    {
                        si (ConcurrencyErrorOccured ! = nulle)
                            this.ConcurrencyErrorOccured (dex. Rangée, nouvel EventArgs ());
                        //ConcurrencyError = rectifient ;
                        Ts.Dispose () ;
                        retour ;
                    }
                }
        }
}
class= > " clair " de
> de " codeSnippet " de class= de
class= " lineNumbers " de
class= de
1 :
2 :
3 :
4 :
5 :
6 :
7 :
8 :
9 :
10 :
11 :
12 :
13 :
14 :
15 :
16 :
17 :
18 :
19 :
20 :
21 :
22 :
23 :
24 :
25 :
26 :
27 :
28 :
29 :
30 :
31 :
32 :
33 :
34 :
35 :
36 :
37 :
38 :
39 :
40 :
41 :
42 :
43 :
44 :
45 :
46 :
47 :
48 :
49 :
50 :
51 :
52 :
53 :
54 :
55 :
56 :
57 :
58 :
59 :
60 :
61 :
62 :
63 :
64 :
65 :
66 :
67 :
68 :
69 :
70 :
71 :
72 :
73 :
74 :
75 :
76 :
77 :
78 :
79 :
80 :
81 :
82 :
>private " de l'id= " codeSnippet787912 de
 1 && rame [0]. Tableau ! = nulle)
                Entité = rangées [0]. Tableau ;
            autrement
                retour ;

            si (entité de && de vaeCollection.IsCollectionValid ! = nulle)
            {
                ConcurrencyError booléen = faux ;
                
                utilisation (solides totaux de TransactionScope = (nouveau TransactionScope ())
                {
                    essai
                    {
                       
                        si (== UpdateAction.Update d'UpdateAction)
                        {
                            si (l'entité est ISaveable || L'entité est ISaveMultipleRows)
                            {
                                si (l'entité est && d'ISaveMultipleRows Rows.Length > 1)
                                    (Entité (d'ISaveMultipleRows)). Économiser (rangées) ;
                                autrement
                                    (Entité (d'ISaveable)). Économiser () ;
                            }
                        }
                        autrement si (== UpdateAction.Delete d'UpdateAction)
                        {
                            si (l'entité est IDeleteable || L'entité est IDeleteMultipleRows)
                            {
                                si (l'entité est && d'IDeleteMultipleRows Rows.Length > 1)
                                {
                                    (Entité (d'IDeleteMultipleRows)) .DeleteObject (rangées) ;

                                    si (DoCommit)
                                        (Entité (d'IDeleteMultipleRows)) .CommitDeletedObject (rangées) ;
                                }
                                autrement
                                {
                                    (Entité (d'IDeleteable)) .DeleteObject () ;

                                    si (DoCommit)
                                        (Entité (d'IDeleteable)) .CommitDeletedObject () ;
                                }
                            }
                        }

                        Ts.Complete () ;
                    }
                    crochet (TransactionAbortedException ex)
                    {
                        si (this.DatabaseUpdateError ! = nulle)
                        {
                            ficeler le message = « Fehler \ r \ n » ;

                            si (ex.InnerException ! = nulle)
                                Message += ex.InnerException.Message + « \ r \ nStacktrace :  » + ex.InnerException.StackTrace ;
                            autrement
                                Message += ex. Message + « \ r \ nStacktrace :  » + ex.StackTrace ;

                            this.DatabaseUpdateError (nouvel ExceptionEventArgs (message));
                        }
                        autrement si (ex.InnerException ! = nulle)
                            jet ex.InnerException ;
                        autrement
                            jet ex ;
                    }
                    crochet (dex de DBConcurrencyException)
                    {
                        si (ConcurrencyErrorOccured ! = nulle)
                            this.ConcurrencyErrorOccured (dex. Rangée, nouvel EventArgs ());
                        //ConcurrencyError = rectifient ;
                        Ts.Dispose () ;
                        retour ;
                    }
                }
        }
}
class= de

Réponse : transactionscopes nichés

vérifier cet article gentil :

http://www.15seconds.com/issue/060413.htm
Autres solutions  
  •  MS Excel 2007 et pdf - l'exportation vers le pdf prend de longues heures !
  •  Dans le Perl, comment j'ajoute une valeur à la liste, puis le contrôle pour voir si la valeur existent avant d'ajouter une nouvelle valeur
  •  Comment fais j'initialiser de la HP BL460c G6 de san et de la HP XP 240000
  •  Comment fais j'employer une clef de permis de volume sur un ordinateur de HP avec du CD de restauration
  •  Emplacement primaire de deux SCCM dans l'annuaire actif
  •  L'initiateur et la HP D2D de l'iSCSI R2 du serveur 2008 de Windows GERCENT l'issue
  •  Stocker le dossier dans le mysql using connector.net et le champ de goutte
  •  Carte vidéo d'USB - bit 32 sur le matériel travaillant au niveau du bit 64 ?
  •  asp.net que j'essaye de convertir une forme de HTML en forme d'aspx ou ? ce qui jamais. Aide du besoin sur la façon dont à à elle.
  •  Winzip 12 issues de secours du travail ?
  •  
    programming4us programming4us