チェンジセット 1601 (default)
- 日時:
- 2023/09/06 11:29:56 (13ヵ月前)
- 場所:
- framework/trunk/CoreLibrary/Sources/Data
- ファイル:
-
- 2個の更新
凡例:
- 未変更
- 追加
- 削除
-
framework/trunk/CoreLibrary/Sources/Data/DataModelManager.cs
r1108 r1601 299 299 protected TransactionScope EnsureTransaction() 300 300 { 301 return (managerForTransaction ?? this).CreateTransactionScope( );301 return (managerForTransaction ?? this).CreateTransactionScope(this); 302 302 } 303 303 … … 305 305 /// トランザクションスコープを作成して返します。 306 306 /// </summary> 307 /// <param name="owner"> 308 /// このトランザクションスコープを作成したインスタンス。 309 /// </param> 307 310 /// <returns> 308 311 /// 作成したトランザクションスコープ。 … … 311 314 /// このメソッドはトップレベルのマネージャからのみ呼ぶことが出来ます。 312 315 /// </remarks> 313 private TransactionScope CreateTransactionScope( )316 private TransactionScope CreateTransactionScope(DataModelManager owner) 314 317 { 315 318 // 状態をチェック 316 319 Debug.Assert(managerForTransaction == null, "Parent manager is not null."); 317 320 318 return new TransactionScopeImpl(GetTransactionManager() );321 return new TransactionScopeImpl(GetTransactionManager(), owner); 319 322 } 320 323 … … 334 337 335 338 return transactionManager 336 ?? (transactionManager = new TransactionManager( connection, transaction));339 ?? (transactionManager = new TransactionManager(this, connection, transaction)); 337 340 } 338 341 … … 351 354 352 355 /// <summary> 356 /// このトランザクションスコープを作成したインスタンス。 357 /// </summary> 358 [DebuggerBrowsable(DebuggerBrowsableState.Never)] 359 private readonly DataModelManager owner; 360 361 /// <summary> 353 362 /// コミット可能かどうか。 354 363 /// </summary> … … 372 381 /// トランザクションマネージャ。 373 382 /// </param> 374 internal TransactionScopeImpl(TransactionManager transactionManager) 383 /// <param name="owner"> 384 /// このトランザクションスコープを作成したインスタンス。 385 /// </param> 386 internal TransactionScopeImpl(TransactionManager transactionManager, DataModelManager owner) 375 387 { 376 388 this.transactionManager = transactionManager; 389 this.owner = owner; 377 390 378 391 transactionManager.AddReference(); … … 394 407 } 395 408 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 396 441 397 442 /// <summary> … … 446 491 { 447 492 /// <summary> 493 /// データモデルマネージャ。 494 /// </summary> 495 [DebuggerBrowsable(DebuggerBrowsableState.Never)] 496 private readonly DataModelManager manager; 497 498 /// <summary> 448 499 /// コネクション。 449 500 /// </summary> … … 453 504 /// トランザクション。 454 505 /// </summary> 506 [DebuggerBrowsable(DebuggerBrowsableState.Never)] 455 507 private ICommonDbTransaction transaction; 456 508 … … 469 521 /// </summary> 470 522 private int referenceCount; 471 523 472 524 473 525 /// <summary> 474 526 /// インスタンスを作成します。 475 527 /// </summary> 528 /// <param name="manager"> 529 /// 作成元のデータモデルマネージャ。 530 /// </param> 476 531 /// <param name="connection"> 477 532 /// コネクション。 … … 480 535 /// トランザクション。 481 536 /// </param> 482 internal TransactionManager(ICommonDbConnection connection, ICommonDbTransaction transaction) 483 { 537 internal TransactionManager(DataModelManager manager, ICommonDbConnection connection, ICommonDbTransaction transaction) 538 { 539 this.manager = manager; 484 540 if (transaction == null) 485 541 { … … 494 550 } 495 551 552 553 /// <summary> 554 /// データモデルマネージャを取得します。 555 /// </summary> 556 /// <value> 557 /// データモデルマネージャ。 558 /// </value> 559 internal DataModelManager Manager 560 { 561 get 562 { 563 return manager; 564 } 565 } 496 566 497 567 /// <summary> -
framework/trunk/CoreLibrary/Sources/Data/TransactionScope.cs
r1120 r1601 70 70 } 71 71 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 72 98 73 99 /// <summary> … … 127 153 128 154 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); 129 275 MarkToCommit(); 130 276 return result;
※ 詳しい使い方は
TracChangeset を参照してください。