チェンジセット 1601 (default)


以下の違いを無視:
日時:
2023/09/06 11:29:56 (13ヵ月前)
更新者:
hizuya@…
ログメッセージ:
  • TransactionScope に Owner と Orign プロパティを追加。
  • TransactionScope.MarkToCommit に引数を増やしたオーバーロードを追加。
場所:
framework/trunk/CoreLibrary/Sources/Data
ファイル:
2個の更新

凡例:

未変更
追加
削除
  • framework/trunk/CoreLibrary/Sources/Data/DataModelManager.cs

    r1108 r1601  
    299299        protected TransactionScope EnsureTransaction() 
    300300        { 
    301             return (managerForTransaction ?? this).CreateTransactionScope(); 
     301            return (managerForTransaction ?? this).CreateTransactionScope(this); 
    302302        } 
    303303 
     
    305305        /// トランザクションスコープを作成して返します。 
    306306        /// </summary> 
     307        /// <param name="owner"> 
     308        /// このトランザクションスコープを作成したインスタンス。 
     309        /// </param> 
    307310        /// <returns> 
    308311        /// 作成したトランザクションスコープ。 
     
    311314        /// このメソッドはトップレベルのマネージャからのみ呼ぶことが出来ます。 
    312315        /// </remarks> 
    313         private TransactionScope CreateTransactionScope() 
     316        private TransactionScope CreateTransactionScope(DataModelManager owner) 
    314317        { 
    315318            // 状態をチェック 
    316319            Debug.Assert(managerForTransaction == null, "Parent manager is not null."); 
    317320 
    318             return new TransactionScopeImpl(GetTransactionManager()); 
     321            return new TransactionScopeImpl(GetTransactionManager(), owner); 
    319322        } 
    320323 
     
    334337 
    335338            return transactionManager 
    336                 ?? (transactionManager = new TransactionManager(connection, transaction)); 
     339                ?? (transactionManager = new TransactionManager(this, connection, transaction)); 
    337340        } 
    338341 
     
    351354 
    352355            /// <summary> 
     356            /// このトランザクションスコープを作成したインスタンス。 
     357            /// </summary> 
     358            [DebuggerBrowsable(DebuggerBrowsableState.Never)] 
     359            private readonly DataModelManager owner; 
     360 
     361            /// <summary> 
    353362            /// コミット可能かどうか。 
    354363            /// </summary> 
     
    372381            /// トランザクションマネージャ。 
    373382            /// </param> 
    374             internal TransactionScopeImpl(TransactionManager transactionManager) 
     383            /// <param name="owner"> 
     384            /// このトランザクションスコープを作成したインスタンス。 
     385            /// </param> 
     386            internal TransactionScopeImpl(TransactionManager transactionManager, DataModelManager owner) 
    375387            { 
    376388                this.transactionManager = transactionManager; 
     389                this.owner = owner; 
    377390 
    378391                transactionManager.AddReference(); 
     
    394407            } 
    395408 
     409            /// <summary> 
     410            /// トランザクションスコープを作成した大元のインスタンスを取得します。 
     411            /// </summary> 
     412            /// <value> 
     413            /// トランザクションスコープを作成した大元のインスタンス。 
     414            /// </value> 
     415            /// <remarks> 
     416            /// トランザクションスコープがネストした場合、一番最初にトランザクションスコープを作成したオブジェクトです。 
     417            /// このインスタンスがトップレベルのトランザクションスコープの場合、<see cref="Owner"/> と同じです。 
     418            /// </remarks> 
     419            public override object Origin 
     420            { 
     421                get 
     422                { 
     423                    return transactionManager.Manager; 
     424                } 
     425            } 
     426 
     427            /// <summary> 
     428            /// このトランザクションスコープを作成したインスタンスを取得します。 
     429            /// </summary> 
     430            /// <value> 
     431            /// このトランザクションスコープを作成したインスタンス。 
     432            /// </value> 
     433            public override object Owner 
     434            { 
     435                get 
     436                { 
     437                    return owner; 
     438                } 
     439            } 
     440 
    396441 
    397442            /// <summary> 
     
    446491        { 
    447492            /// <summary> 
     493            /// データモデルマネージャ。 
     494            /// </summary> 
     495            [DebuggerBrowsable(DebuggerBrowsableState.Never)] 
     496            private readonly DataModelManager manager; 
     497 
     498            /// <summary> 
    448499            /// コネクション。 
    449500            /// </summary> 
     
    453504            /// トランザクション。 
    454505            /// </summary> 
     506            [DebuggerBrowsable(DebuggerBrowsableState.Never)] 
    455507            private ICommonDbTransaction transaction; 
    456508 
     
    469521            /// </summary> 
    470522            private int referenceCount; 
    471             
     523 
    472524 
    473525            /// <summary> 
    474526            /// インスタンスを作成します。 
    475527            /// </summary> 
     528            /// <param name="manager"> 
     529            /// 作成元のデータモデルマネージャ。 
     530            /// </param> 
    476531            /// <param name="connection"> 
    477532            /// コネクション。 
     
    480535            /// トランザクション。 
    481536            /// </param> 
    482             internal TransactionManager(ICommonDbConnection connection, ICommonDbTransaction transaction) 
    483             { 
     537            internal TransactionManager(DataModelManager manager, ICommonDbConnection connection, ICommonDbTransaction transaction) 
     538            { 
     539                this.manager = manager; 
    484540                if (transaction == null) 
    485541                { 
     
    494550            } 
    495551 
     552 
     553            /// <summary> 
     554            /// データモデルマネージャを取得します。 
     555            /// </summary> 
     556            /// <value> 
     557            /// データモデルマネージャ。 
     558            /// </value> 
     559            internal DataModelManager Manager 
     560            { 
     561                get 
     562                { 
     563                    return manager; 
     564                } 
     565            } 
    496566 
    497567            /// <summary> 
  • framework/trunk/CoreLibrary/Sources/Data/TransactionScope.cs

    r1120 r1601  
    7070        } 
    7171 
     72        /// <summary> 
     73        /// トランザクションスコープを作成した大元のインスタンスを取得します。 
     74        /// </summary> 
     75        /// <value> 
     76        /// トランザクションスコープを作成した大元のインスタンス。 
     77        /// </value> 
     78        /// <remarks> 
     79        /// トランザクションスコープがネストした場合、一番最初にトランザクションスコープを作成したオブジェクトです。 
     80        /// このインスタンスがトップレベルのトランザクションスコープの場合、<see cref="Owner"/> と同じです。 
     81        /// </remarks> 
     82        public abstract object Origin 
     83        { 
     84            get; 
     85        } 
     86 
     87        /// <summary> 
     88        /// このトランザクションスコープを作成したインスタンスを取得します。 
     89        /// </summary> 
     90        /// <value> 
     91        /// このトランザクションスコープを作成したインスタンス。 
     92        /// </value> 
     93        public abstract object Owner 
     94        { 
     95            get; 
     96        } 
     97 
    7298 
    7399        /// <summary> 
     
    127153 
    128154            T result = action(); 
     155            MarkToCommit(); 
     156            return result; 
     157        } 
     158 
     159        /// <summary> 
     160        /// アクションを実行し成功した場合に、 
     161        /// このトランザクションスコープが成功したことを通知し、コミットが行われるのを許可します。 
     162        /// </summary> 
     163        /// <typeparam name="T1">アクションの引数1の型。</typeparam> 
     164        /// <typeparam name="TResult">アクションの戻り値の型。</typeparam> 
     165        /// <param name="action">実行するアクション。</param> 
     166        /// <param name="arg1"><paramref name="action"/> の引数1。</param> 
     167        /// <returns> 
     168        /// アクションからの戻り値。 
     169        /// </returns> 
     170        /// <exception cref="ArgumentNullException"> 
     171        /// <paramref name="action"/> が <see langword="null"/> 参照です。 
     172        /// </exception> 
     173        public TResult MarkToCommit<T1, TResult>(Func<T1, TResult> action, T1 arg1) 
     174        { 
     175            // 引数をチェック 
     176            if (action == null) 
     177            { 
     178                throw new ArgumentNullException("action"); 
     179            } 
     180 
     181            TResult result = action(arg1); 
     182            MarkToCommit(); 
     183            return result; 
     184        } 
     185 
     186        /// <summary> 
     187        /// アクションを実行し成功した場合に、 
     188        /// このトランザクションスコープが成功したことを通知し、コミットが行われるのを許可します。 
     189        /// </summary> 
     190        /// <typeparam name="T1">アクションの引数1の型。</typeparam> 
     191        /// <typeparam name="T2">アクションの引数2の型。</typeparam> 
     192        /// <typeparam name="TResult">アクションの戻り値の型。</typeparam> 
     193        /// <param name="action">実行するアクション。</param> 
     194        /// <param name="arg1"><paramref name="action"/> の引数1。</param> 
     195        /// <param name="arg2"><paramref name="action"/> の引数2。</param> 
     196        /// <returns> 
     197        /// アクションからの戻り値。 
     198        /// </returns> 
     199        /// <exception cref="ArgumentNullException"> 
     200        /// <paramref name="action"/> が <see langword="null"/> 参照です。 
     201        /// </exception> 
     202        public TResult MarkToCommit<T1, T2, TResult>(Func<T1, T2, TResult> action, T1 arg1, T2 arg2) 
     203        { 
     204            // 引数をチェック 
     205            if (action == null) 
     206            { 
     207                throw new ArgumentNullException("action"); 
     208            } 
     209 
     210            TResult result = action(arg1, arg2); 
     211            MarkToCommit(); 
     212            return result; 
     213        } 
     214 
     215        /// <summary> 
     216        /// アクションを実行し成功した場合に、 
     217        /// このトランザクションスコープが成功したことを通知し、コミットが行われるのを許可します。 
     218        /// </summary> 
     219        /// <typeparam name="T1">アクションの引数1の型。</typeparam> 
     220        /// <typeparam name="T2">アクションの引数2の型。</typeparam> 
     221        /// <typeparam name="T3">アクションの引数3の型。</typeparam> 
     222        /// <typeparam name="TResult">アクションの戻り値の型。</typeparam> 
     223        /// <param name="action">実行するアクション。</param> 
     224        /// <param name="arg1"><paramref name="action"/> の引数1。</param> 
     225        /// <param name="arg2"><paramref name="action"/> の引数2。</param> 
     226        /// <param name="arg3"><paramref name="action"/> の引数3。</param> 
     227        /// <returns> 
     228        /// アクションからの戻り値。 
     229        /// </returns> 
     230        /// <exception cref="ArgumentNullException"> 
     231        /// <paramref name="action"/> が <see langword="null"/> 参照です。 
     232        /// </exception> 
     233        public TResult MarkToCommit<T1, T2, T3, TResult>(Func<T1, T2, T3, TResult> action, T1 arg1, T2 arg2, T3 arg3) 
     234        { 
     235            // 引数をチェック 
     236            if (action == null) 
     237            { 
     238                throw new ArgumentNullException("action"); 
     239            } 
     240 
     241            TResult result = action(arg1, arg2, arg3); 
     242            MarkToCommit(); 
     243            return result; 
     244        } 
     245 
     246        /// <summary> 
     247        /// アクションを実行し成功した場合に、 
     248        /// このトランザクションスコープが成功したことを通知し、コミットが行われるのを許可します。 
     249        /// </summary> 
     250        /// <typeparam name="T1">アクションの引数1の型。</typeparam> 
     251        /// <typeparam name="T2">アクションの引数2の型。</typeparam> 
     252        /// <typeparam name="T3">アクションの引数3の型。</typeparam> 
     253        /// <typeparam name="T4">アクションの引数4の型。</typeparam> 
     254        /// <typeparam name="TResult">アクションの戻り値の型。</typeparam> 
     255        /// <param name="action">実行するアクション。</param> 
     256        /// <param name="arg1"><paramref name="action"/> の引数1。</param> 
     257        /// <param name="arg2"><paramref name="action"/> の引数2。</param> 
     258        /// <param name="arg3"><paramref name="action"/> の引数3。</param> 
     259        /// <param name="arg4"><paramref name="action"/> の引数4。</param> 
     260        /// <returns> 
     261        /// アクションからの戻り値。 
     262        /// </returns> 
     263        /// <exception cref="ArgumentNullException"> 
     264        /// <paramref name="action"/> が <see langword="null"/> 参照です。 
     265        /// </exception> 
     266        public TResult MarkToCommit<T1, T2, T3, T4, TResult>(Func<T1, T2, T3, T4, TResult> action, T1 arg1, T2 arg2, T3 arg3, T4 arg4) 
     267        { 
     268            // 引数をチェック 
     269            if (action == null) 
     270            { 
     271                throw new ArgumentNullException("action"); 
     272            } 
     273 
     274            TResult result = action(arg1, arg2, arg3, arg4); 
    129275            MarkToCommit(); 
    130276            return result; 
詳しい使い方は TracChangeset を参照してください。