Вопрос : гнездят transactionscopes

hi experts

see Кодий Кодего below.
this, котор получает исполненным когда я сохраняю рядок или таблицу к database.
A (реальность (ISaveable)). Сохраньте () ; метод может также вызвать другие за исключением () метода для таблиц ребенка или ребенок rows.
so метод InternalUpdateEntity () получает вызванные множественные времена и множественными transactionscopes будут used.

Now, котор я вопросы/Problems.
1. буду они вся польза такое же transactionscope или всегда новое одно и делаю это даже делаю чувство. Должен я улучшать как раз создаю одно transactionscope?

2. когда я получу ошибку совпадения в, котор гнездят transactionscope. мое применение бросит transactionaborted исключение, несмотря на то, что я фактическ улавливаю точно это исключение?
What smogло причинить то?

thanks заранее для вашего help
I am использующ ПРОТИВ 2008, C#, .NET 3.5, выигрыш Forms

class= " ясное " >
> " codeSnippet " class=
class= " lineNumbers "
class=
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 пустое InternalUpdateEntity " class= " id= " codeSnippet787896
 1 && гребет, то [0]. Таблица! = null)
                Реальность = рядки [0]. Таблица;
            еще
                возвращение;

            если (реальность && vaeCollection.IsCollectionValid! = null)
            {
                Булевское ConcurrencyError = ложно;
                
                использование (Ts TransactionScope = ((null == this.ParentTransaction)? новое TransactionScope (): новое TransactionScope (this.ParentTransaction)))
                {
                    попытка
                    {
                        если (null == this.ParentTransaction), то
                            this.ParentTransaction = Transaction.Current.DependentClone (DependentCloneOption.BlockCommitUntilComplete);

                        если (== UpdateAction.Update UpdateAction), то
                        {
                            если (реальность будет ISaveable || Реальность будет ISaveMultipleRows)
                            {
                                если (реальность будет && ISaveMultipleRows Rows.Length > 1)
                                    (Реальность (ISaveMultipleRows)). Сохраньте (рядки);
                                еще
                                    (Реальность (ISaveable)). Сохраньте ();
                            }
                        }
                        еще если (== UpdateAction.Delete UpdateAction), то
                        {
                            если (реальность будет IDeleteable || Реальность будет IDeleteMultipleRows)
                            {
                                если (реальность будет && IDeleteMultipleRows Rows.Length > 1)
                                {
                                    (Реальность (IDeleteMultipleRows)) .DeleteObject (рядки);

                                    если (DoCommit), то
                                        (Реальность (IDeleteMultipleRows)) .CommitDeletedObject (рядки);
                                }
                                еще
                                {
                                    (Реальность (IDeleteable)) .DeleteObject ();

                                    если (DoCommit), то
                                        (Реальность (IDeleteable)) .CommitDeletedObject ();
                                }
                            }
                        }

                        Ts.Complete ();
                    }
                    задвижка (TransactionAbortedException ex)
                    {
                        если (this.DatabaseUpdateError! = null)
                        {
                            зашнуруйте сообщение = «Fehler \ r \ n»;

                            если (ex.InnerException! = null)
                                Сообщение += ex.InnerException.Message + «\ r \ nStacktrace: » + ex.InnerException.StackTrace;
                            еще
                                Сообщение += ex. Сообщение + «\ r \ nStacktrace: » + ex.StackTrace;

                            this.DatabaseUpdateError (новое ExceptionEventArgs (сообщение));
                        }
                        еще если (ex.InnerException! = null)
                            ход ex.InnerException;
                        еще
                            ход ex;
                    }
                    задвижка (dex DBConcurrencyException)
                    {
                        если (ConcurrencyErrorOccured! = null)
                            this.ConcurrencyErrorOccured (dex. Рядок, новое EventArgs ());
                        //ConcurrencyError = true;
                        Ts.Dispose ();
                        возвращение;
                    }
                }
        }
}
class= " ясное " >
> " codeSnippet " class=
class= " lineNumbers "
class=
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 пустое InternalUpdateEntity " class= " id= " codeSnippet787912
 1 && гребет, то [0]. Таблица! = null)
                Реальность = рядки [0]. Таблица;
            еще
                возвращение;

            если (реальность && vaeCollection.IsCollectionValid! = null)
            {
                Булевское ConcurrencyError = ложно;
                
                использование (Ts TransactionScope = (новое TransactionScope ())
                {
                    попытка
                    {
                       
                        если (== UpdateAction.Update UpdateAction), то
                        {
                            если (реальность будет ISaveable || Реальность будет ISaveMultipleRows)
                            {
                                если (реальность будет && ISaveMultipleRows Rows.Length > 1)
                                    (Реальность (ISaveMultipleRows)). Сохраньте (рядки);
                                еще
                                    (Реальность (ISaveable)). Сохраньте ();
                            }
                        }
                        еще если (== UpdateAction.Delete UpdateAction), то
                        {
                            если (реальность будет IDeleteable || Реальность будет IDeleteMultipleRows)
                            {
                                если (реальность будет && IDeleteMultipleRows Rows.Length > 1)
                                {
                                    (Реальность (IDeleteMultipleRows)) .DeleteObject (рядки);

                                    если (DoCommit), то
                                        (Реальность (IDeleteMultipleRows)) .CommitDeletedObject (рядки);
                                }
                                еще
                                {
                                    (Реальность (IDeleteable)) .DeleteObject ();

                                    если (DoCommit), то
                                        (Реальность (IDeleteable)) .CommitDeletedObject ();
                                }
                            }
                        }

                        Ts.Complete ();
                    }
                    задвижка (TransactionAbortedException ex)
                    {
                        если (this.DatabaseUpdateError! = null)
                        {
                            зашнуруйте сообщение = «Fehler \ r \ n»;

                            если (ex.InnerException! = null)
                                Сообщение += ex.InnerException.Message + «\ r \ nStacktrace: » + ex.InnerException.StackTrace;
                            еще
                                Сообщение += ex. Сообщение + «\ r \ nStacktrace: » + ex.StackTrace;

                            this.DatabaseUpdateError (новое ExceptionEventArgs (сообщение));
                        }
                        еще если (ex.InnerException! = null)
                            ход ex.InnerException;
                        еще
                            ход ex;
                    }
                    задвижка (dex DBConcurrencyException)
                    {
                        если (ConcurrencyErrorOccured! = null)
                            this.ConcurrencyErrorOccured (dex. Рядок, новое EventArgs ());
                        //ConcurrencyError = true;
                        Ts.Dispose ();
                        возвращение;
                    }
                }
        }
}
class=

Ответ : гнездят transactionscopes

заканчивать связь эта славная статья:

http://www.15seconds.com/issue/060413.htm
Другие решения  
  •  Как я добавляю кнопки на форме PDF для того чтобы добавить/извлекаю рядки данных?
  •  Шнур ошибки в блоке задвижки?
  •  сколько вариант сервера SQL на одной машине
  •  Внешний вид 2007 не может архивный файл открытой сети сохраненный
  •  Активно директория DNS записывает вопрос
  •  Отчет о доступа 2010 экспорта к CSV с коллекторами?
  •  Прокладчик OCE 9400 не начинает
  •  как добавить десятичное место в формуле в отчете о кристалла seagate
  •  Windows XP и Мичрософт Оутлоок и проблемы установителя Windows
  •  VB6 к VS2010 - консультации тренировки?
  •  
    programming4us programming4us