Pytanie : gniazdować transactionscopes

cześć experts

see the kod below.
this kod dostawać wykonywać za każdym razem, gdy I save rząd lub stół the database.
A ((ISaveable) Jednostka). Save () ; metoda móc także móc Oprócz () metoda dla dziecko stół lub dziecko rows.
so the InternalUpdateEntity () metoda dostawać nazwany wieloskładnikowy czas i wieloskładnikowy transactionscopes być used.

Now I musieć pytanie/Problems.
1. wszystkie use the ten sam transactionscope lub zawsze nowy i robić lub nawet robić sens. Musieć I właśnie tworzyć jeden transactionscope?

2. gdy I dostać concurrency błąd w gniazdować transactionscope. mój zastosowanie rzucać transactionaborted wyjątek, pomimo faktu iż I właściwie łapać dokładnie ten wyjątek?
What móc to?

thanks w postęp dla twój help
I am używać VS 2008, C#, .NET 3.5, Wygrana 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:
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 kawitacyjny InternalUpdateEntity (DataRow [] Rząd, ValidationErrorCollection vaeCollection, UpdateAction UpdateAction, Boolowski DoCommit)
        {
            przedmiot Jednostka = null;

            jeżeli (Rows.Length == 1)
                Jednostka = Rząd [(0)];
            inny jeżeli (Rows.Length > (1) && Wiosłować [(0)]. Stół! = null)
                Jednostka = Rząd [(0)]. Stół;
            inny
                powrót;

            jeżeli (vaeCollection.IsCollectionValid && Jednostka! = null)
            {
                Boolowski ConcurrencyError = fałszywy;
                
                (TransactionScope Ts = ((this.ParentTransaction == null)? nowy TransactionScope (): nowy TransactionScope (this.ParentTransaction)))
                {
                    próba
                    {
                        jeżeli (this.ParentTransaction == null)
                            this.ParentTransaction = Transaction.Current.DependentClone (DependentCloneOption.BlockCommitUntilComplete);

                        jeżeli (UpdateAction == UpdateAction.Update)
                        {
                            jeżeli (Jednostka być ISaveable || Jednostka być ISaveMultipleRows)
                            {
                                jeżeli (Jednostka być ISaveMultipleRows && Rows.Length > 1)
                                    ((ISaveMultipleRows) Jednostka). Save (Rząd);
                                inny
                                    ((ISaveable) Jednostka). Save ();
                            }
                        }
                        inny jeżeli (UpdateAction == UpdateAction.Delete)
                        {
                            jeżeli (Jednostka być IDeleteable || Jednostka być IDeleteMultipleRows)
                            {
                                jeżeli (Jednostka być IDeleteMultipleRows && Rows.Length > 1)
                                {
                                    ((IDeleteMultipleRows) Jednostka) .DeleteObject (Rząd);

                                    jeżeli (DoCommit)
                                        ((IDeleteMultipleRows) Jednostka) .CommitDeletedObject (Rząd);
                                }
                                inny
                                {
                                    ((IDeleteable) Jednostka) .DeleteObject ();

                                    jeżeli (DoCommit)
                                        ((IDeleteable) Jednostka) .CommitDeletedObject ();
                                }
                            }
                        }

                        Ts.Complete ();
                    }
                    chwyt (TransactionAbortedException transactionAbortedException)
                    {
                        jeżeli (this.DatabaseUpdateError! = null)
                        {
                            smyczkowy Wiadomość = "Fehler \ r \ n";

                            jeżeli (ex.InnerException! = null)
                                Wiadomość += ex.InnerException.Message + "\ r \ nStacktrace: " + ex.InnerException.StackTrace;
                            inny
                                Wiadomość += +=. Wiadomość + "\ r \ nStacktrace: " + ex.StackTrace;

                            this.DatabaseUpdateError (nowy ExceptionEventArgs (Wiadomość));
                        }
                        inny jeżeli (ex.InnerException! = null)
                            rzut ex.InnerException;
                        inny
                            rzut rzut;
                    }
                    chwyt (DBConcurrencyException dex)
                    {
                        jeżeli (ConcurrencyErrorOccured! = null)
                            this.ConcurrencyErrorOccured (dex. Rząd, nowy EventArgs ());
                        //ConcurrencyError = true;
                        Ts.Dispose ();
                        powrót;
                    }
                }
        }
}
(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 kawitacyjny InternalUpdateEntity (DataRow [] Rząd, ValidationErrorCollection vaeCollection, UpdateAction UpdateAction, Boolowski DoCommit)
        {
            przedmiot Jednostka = null;

            jeżeli (Rows.Length == 1)
                Jednostka = Rząd [(0)];
            inny jeżeli (Rows.Length > (1) && Wiosłować [(0)]. Stół! = null)
                Jednostka = Rząd [(0)]. Stół;
            inny
                powrót;

            jeżeli (vaeCollection.IsCollectionValid && Jednostka! = null)
            {
                Boolowski ConcurrencyError = fałszywy;
                
                (TransactionScope Ts = (nowy TransactionScope ())
                {
                    próba
                    {
                       
                        jeżeli (UpdateAction == UpdateAction.Update)
                        {
                            jeżeli (Jednostka być ISaveable || Jednostka być ISaveMultipleRows)
                            {
                                jeżeli (Jednostka być ISaveMultipleRows && Rows.Length > 1)
                                    ((ISaveMultipleRows) Jednostka). Save (Rząd);
                                inny
                                    ((ISaveable) Jednostka). Save ();
                            }
                        }
                        inny jeżeli (UpdateAction == UpdateAction.Delete)
                        {
                            jeżeli (Jednostka być IDeleteable || Jednostka być IDeleteMultipleRows)
                            {
                                jeżeli (Jednostka być IDeleteMultipleRows && Rows.Length > 1)
                                {
                                    ((IDeleteMultipleRows) Jednostka) .DeleteObject (Rząd);

                                    jeżeli (DoCommit)
                                        ((IDeleteMultipleRows) Jednostka) .CommitDeletedObject (Rząd);
                                }
                                inny
                                {
                                    ((IDeleteable) Jednostka) .DeleteObject ();

                                    jeżeli (DoCommit)
                                        ((IDeleteable) Jednostka) .CommitDeletedObject ();
                                }
                            }
                        }

                        Ts.Complete ();
                    }
                    chwyt (TransactionAbortedException transactionAbortedException)
                    {
                        jeżeli (this.DatabaseUpdateError! = null)
                        {
                            smyczkowy Wiadomość = "Fehler \ r \ n";

                            jeżeli (ex.InnerException! = null)
                                Wiadomość += ex.InnerException.Message + "\ r \ nStacktrace: " + ex.InnerException.StackTrace;
                            inny
                                Wiadomość += +=. Wiadomość + "\ r \ nStacktrace: " + ex.StackTrace;

                            this.DatabaseUpdateError (nowy ExceptionEventArgs (Wiadomość));
                        }
                        inny jeżeli (ex.InnerException! = null)
                            rzut ex.InnerException;
                        inny
                            rzut rzut;
                    }
                    chwyt (DBConcurrencyException dex)
                    {
                        jeżeli (ConcurrencyErrorOccured! = null)
                            this.ConcurrencyErrorOccured (dex. Rząd, nowy EventArgs ());
                        //ConcurrencyError = true;
                        Ts.Dispose ();
                        powrót;
                    }
                }
        }
}

Odpowiedź : gniazdować transactionscopes

sprawdzać artykuł ten ładny artykuł:

http://www.15seconds.com/issue/060413.htm
Inne rozwiązania  
 
programming4us programming4us