Frage : genistete transactionscopes

hallo experts

see, das der Code des Codes below.
this durchgeführt erhält, wann immer ich eine Reihe oder eine Tabelle zum database.
A speichere ((ISaveable) Wesen). () sparen; Methode kann andere außer () Methode für Kindtabellen auch benennen, oder Kind rows.
so die InternalUpdateEntity () Methode erhält benannte mehrfache Zeiten und mehrfache transactionscopes sind used.

Now, das ich Fragen/Probleme.
1. werde sie aller Gebrauch das gleiche transactionscope oder immer ein Neues und tue dies bin sogar sinnvoll muss. Sollte ich gerade verbessern verursache ein transactionscope?

2., wenn ich eine Parallelitätsstörung in einem genisteten transactionscope erhalte. meine Anwendung wirft eine transactionaborted Ausnahme, obwohl ich wirklich mich genau diese Ausnahme verfange?
What konnte das verursachen?

thanks im Voraus für Ihr help
I morgens mit GEGEN 2008, C#, .NET 3.5, Gewinn Forms

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:
6:
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 leeres InternalUpdateEntity (DataRow [] Reihen, ValidationErrorCollection vaeCollection, UpdateAction UpdateAction, Boolesches DoCommit)
        {
            Gegenstandwesen = -null;

            wenn (Rows.Length == 1)
                Wesen = Reihen [0];
            sonst wenn (Rows.Length > 1 && rudert [0]. Tabelle! = Null)
                Wesen = Reihen [0]. Tabelle;
            sonst
                Rückkehr;

            wenn (vaeCollection.IsCollectionValid && Wesen! = Null)
            {
                Boolesches ConcurrencyError = falsch;
                
                Anwendung (TransactionScope Ts = ((this.ParentTransaction == Null)? neues TransactionScope (): neues TransactionScope (this.ParentTransaction)))
                {
                    Versuch
                    {
                        wenn (this.ParentTransaction == Null)
                            this.ParentTransaction = Transaction.Current.DependentClone (DependentCloneOption.BlockCommitUntilComplete);

                        wenn (UpdateAction == UpdateAction.Update)
                        {
                            wenn (Wesen ist ISaveable || Wesen ist ISaveMultipleRows)
                            {
                                wenn (Wesen ist ISaveMultipleRows && Rows.Length > 1)
                                    ((ISaveMultipleRows) Wesen). Speichern (Reihen);
                                sonst
                                    ((ISaveable) Wesen). Speichern ();
                            }
                        }
                        sonst, wenn (UpdateAction == UpdateAction.Delete)
                        {
                            wenn (Wesen ist IDeleteable || Wesen ist IDeleteMultipleRows)
                            {
                                wenn (Wesen ist IDeleteMultipleRows && Rows.Length > 1)
                                {
                                    ((IDeleteMultipleRows) Wesen) .DeleteObject (Reihen);

                                    wenn (DoCommit)
                                        ((IDeleteMultipleRows) Wesen) .CommitDeletedObject (Reihen);
                                }
                                sonst
                                {
                                    ((IDeleteable) Wesen) .DeleteObject ();

                                    wenn (DoCommit)
                                        ((IDeleteable) Wesen) .CommitDeletedObject ();
                                }
                            }
                        }

                        Ts.Complete ();
                    }
                    Fang (TransactionAbortedException ex)
                    {
                        wenn (this.DatabaseUpdateError! = Null)
                        {
                            Mitteilung aufreihen = „Fehler \ r \ n“;

                            wenn (ex.InnerException! = Null)
                                Mitteilung += ex.InnerException.Message + „\ r \ nStacktrace: “ + ex.InnerException.StackTrace;
                            sonst
                                Mitteilung += ex. Mitteilung + „\ r \ nStacktrace: “ + ex.StackTrace;

                            this.DatabaseUpdateError (neues ExceptionEventArgs (Mitteilung));
                        }
                        sonst wenn (ex.InnerException! = Null)
                            Wurf ex.InnerException;
                        sonst
                            Wurf ex;
                    }
                    Fang (DBConcurrencyException dex)
                    {
                        wenn (ConcurrencyErrorOccured! = Null)
                            this.ConcurrencyErrorOccured (dex. Reihe, neues EventArgs ());
                        //ConcurrencyError = richten aus;
                        Ts.Dispose ();
                        Rückkehr;
                    }
                }
        }
}
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:
6:
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 leeres InternalUpdateEntity (DataRow [] Reihen, ValidationErrorCollection vaeCollection, UpdateAction UpdateAction, Boolesches DoCommit)
        {
            Gegenstandwesen = -null;

            wenn (Rows.Length == 1)
                Wesen = Reihen [0];
            sonst wenn (Rows.Length > 1 && rudert [0]. Tabelle! = Null)
                Wesen = Reihen [0]. Tabelle;
            sonst
                Rückkehr;

            wenn (vaeCollection.IsCollectionValid && Wesen! = Null)
            {
                Boolesches ConcurrencyError = falsch;
                
                Anwendung (TransactionScope Ts = (neues TransactionScope ())
                {
                    Versuch
                    {
                       
                        wenn (UpdateAction == UpdateAction.Update)
                        {
                            wenn (Wesen ist ISaveable || Wesen ist ISaveMultipleRows)
                            {
                                wenn (Wesen ist ISaveMultipleRows && Rows.Length > 1)
                                    ((ISaveMultipleRows) Wesen). Speichern (Reihen);
                                sonst
                                    ((ISaveable) Wesen). Speichern ();
                            }
                        }
                        sonst, wenn (UpdateAction == UpdateAction.Delete)
                        {
                            wenn (Wesen ist IDeleteable || Wesen ist IDeleteMultipleRows)
                            {
                                wenn (Wesen ist IDeleteMultipleRows && Rows.Length > 1)
                                {
                                    ((IDeleteMultipleRows) Wesen) .DeleteObject (Reihen);

                                    wenn (DoCommit)
                                        ((IDeleteMultipleRows) Wesen) .CommitDeletedObject (Reihen);
                                }
                                sonst
                                {
                                    ((IDeleteable) Wesen) .DeleteObject ();

                                    wenn (DoCommit)
                                        ((IDeleteable) Wesen) .CommitDeletedObject ();
                                }
                            }
                        }

                        Ts.Complete ();
                    }
                    Fang (TransactionAbortedException ex)
                    {
                        wenn (this.DatabaseUpdateError! = Null)
                        {
                            Mitteilung aufreihen = „Fehler \ r \ n“;

                            wenn (ex.InnerException! = Null)
                                Mitteilung += ex.InnerException.Message + „\ r \ nStacktrace: “ + ex.InnerException.StackTrace;
                            sonst
                                Mitteilung += ex. Mitteilung + „\ r \ nStacktrace: “ + ex.StackTrace;

                            this.DatabaseUpdateError (neues ExceptionEventArgs (Mitteilung));
                        }
                        sonst wenn (ex.InnerException! = Null)
                            Wurf ex.InnerException;
                        sonst
                            Wurf ex;
                    }
                    Fang (DBConcurrencyException dex)
                    {
                        wenn (ConcurrencyErrorOccured! = Null)
                            this.ConcurrencyErrorOccured (dex. Reihe, neues EventArgs ());
                        //ConcurrencyError = richten aus;
                        Ts.Dispose ();
                        Rückkehr;
                    }
                }
        }
}

Antwort : genistete transactionscopes

diesen netten Artikel heraus überprüfen:

http://www.15seconds.com/issue/060413.htm
Weitere Lösungen  
 
programming4us programming4us