Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / RunTime / Hosting / SharedConnectionInfo.cs / 1305376 / SharedConnectionInfo.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- #region Using directives using System; using System.Diagnostics; using System.Transactions; using System.Data.Common; using System.Threading; #endregion namespace System.Workflow.Runtime.Hosting { ////// This class keeps the following associated with a Transaction /// - a connection that participates in the transaction. /// - an optional local transaction (DbTransaction) generated from the single-phase-committed Transaction. /// The connection and the local transaction are passed around to different host components to /// do transacted DB work using the shared connection. /// internal sealed class SharedConnectionInfo : IDisposable { readonly DbConnection connection; readonly DbTransaction localTransaction; private bool disposed; private ManualResetEvent handle; #region Constructor ////// Instantiate an opened connection enlisted to the Transaction /// if promotable is false, the Transaction wraps a local /// transaction inside and can never be promoted /// /// /// /// internal SharedConnectionInfo( DbResourceAllocator dbResourceAllocator, Transaction transaction, bool wantPromotable, ManualResetEvent handle) { Debug.Assert((transaction != null), "Null Transaction!"); if (null == handle) throw new ArgumentNullException("handle"); this.handle = handle; if (wantPromotable) { // Enlist a newly opened connection to this regular Transaction this.connection = dbResourceAllocator.OpenNewConnection(); this.connection.EnlistTransaction(transaction); } else { // Make this transaction no longer promotable by attaching our // IPromotableSinglePhaseNotification implementation (LocalTranscaction) // and track the DbConnection and DbTransaction associated with the LocalTranscaction LocalTransaction localTransaction = new LocalTransaction(dbResourceAllocator,handle); transaction.EnlistPromotableSinglePhase(localTransaction); this.connection = localTransaction.Connection; this.localTransaction = localTransaction.Transaction; } } #endregion Constructor #region Accessors internal DbConnection DBConnection { get { return this.connection; } } internal DbTransaction DBTransaction { get { return this.localTransaction; } } #endregion Accessors #region IDisposable Members public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } private void Dispose(bool disposing) { if (!this.disposed) { // // If we're using a LocalTransaction it will close the connection // in it's IPromotableSinglePhaseNotification methods if ((this.localTransaction == null)&&(null != connection)) this.connection.Dispose(); } this.disposed = true; } #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- #region Using directives using System; using System.Diagnostics; using System.Transactions; using System.Data.Common; using System.Threading; #endregion namespace System.Workflow.Runtime.Hosting { ////// This class keeps the following associated with a Transaction /// - a connection that participates in the transaction. /// - an optional local transaction (DbTransaction) generated from the single-phase-committed Transaction. /// The connection and the local transaction are passed around to different host components to /// do transacted DB work using the shared connection. /// internal sealed class SharedConnectionInfo : IDisposable { readonly DbConnection connection; readonly DbTransaction localTransaction; private bool disposed; private ManualResetEvent handle; #region Constructor ////// Instantiate an opened connection enlisted to the Transaction /// if promotable is false, the Transaction wraps a local /// transaction inside and can never be promoted /// /// /// /// internal SharedConnectionInfo( DbResourceAllocator dbResourceAllocator, Transaction transaction, bool wantPromotable, ManualResetEvent handle) { Debug.Assert((transaction != null), "Null Transaction!"); if (null == handle) throw new ArgumentNullException("handle"); this.handle = handle; if (wantPromotable) { // Enlist a newly opened connection to this regular Transaction this.connection = dbResourceAllocator.OpenNewConnection(); this.connection.EnlistTransaction(transaction); } else { // Make this transaction no longer promotable by attaching our // IPromotableSinglePhaseNotification implementation (LocalTranscaction) // and track the DbConnection and DbTransaction associated with the LocalTranscaction LocalTransaction localTransaction = new LocalTransaction(dbResourceAllocator,handle); transaction.EnlistPromotableSinglePhase(localTransaction); this.connection = localTransaction.Connection; this.localTransaction = localTransaction.Transaction; } } #endregion Constructor #region Accessors internal DbConnection DBConnection { get { return this.connection; } } internal DbTransaction DBTransaction { get { return this.localTransaction; } } #endregion Accessors #region IDisposable Members public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } private void Dispose(bool disposing) { if (!this.disposed) { // // If we're using a LocalTransaction it will close the connection // in it's IPromotableSinglePhaseNotification methods if ((this.localTransaction == null)&&(null != connection)) this.connection.Dispose(); } this.disposed = true; } #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- FileDialogPermission.cs
- RotateTransform3D.cs
- MetadataReference.cs
- XmlSchemaInclude.cs
- SafeFileHandle.cs
- TypeSystemProvider.cs
- QilChoice.cs
- ArrayList.cs
- FontFaceLayoutInfo.cs
- XmlSerializerNamespaces.cs
- ResourceReferenceKeyNotFoundException.cs
- LogLogRecord.cs
- QilReplaceVisitor.cs
- CollectionChange.cs
- CounterCreationDataConverter.cs
- Function.cs
- RecordManager.cs
- BackgroundWorker.cs
- DataAdapter.cs
- ResourceDescriptionAttribute.cs
- HttpException.cs
- SynchronizedDispatch.cs
- ValidatorCollection.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- HtmlInputReset.cs
- Pair.cs
- RepeaterCommandEventArgs.cs
- MultiByteCodec.cs
- TrackingQuery.cs
- Line.cs
- EntityDataSourceView.cs
- ConditionCollection.cs
- DbConnectionPoolGroup.cs
- FixedSOMGroup.cs
- X509CertificateChain.cs
- StateItem.cs
- DemultiplexingClientMessageFormatter.cs
- LOSFormatter.cs
- CellIdBoolean.cs
- UserValidatedEventArgs.cs
- PriorityQueue.cs
- LookupTables.cs
- JsonStringDataContract.cs
- SQLMembershipProvider.cs
- UnknownWrapper.cs
- XmlUTF8TextReader.cs
- DesignerFrame.cs
- CheckBoxBaseAdapter.cs
- XmlUrlResolver.cs
- LongTypeConverter.cs
- ScriptResourceAttribute.cs
- Point3DValueSerializer.cs
- QilGenerator.cs
- WorkflowDurableInstance.cs
- SelectionPattern.cs
- FacetValues.cs
- ListBase.cs
- DefaultMemberAttribute.cs
- FontUnitConverter.cs
- SecurityPermission.cs
- DeferredElementTreeState.cs
- AppDomainManager.cs
- PolyQuadraticBezierSegment.cs
- XPathExpr.cs
- TrackingMemoryStream.cs
- LogFlushAsyncResult.cs
- ReadWriteSpinLock.cs
- DataGridAutoFormat.cs
- HelloOperation11AsyncResult.cs
- CqlGenerator.cs
- PlatformNotSupportedException.cs
- Property.cs
- SplashScreen.cs
- HtmlTable.cs
- CollectionViewSource.cs
- DesignRelationCollection.cs
- LeaseManager.cs
- ValidatorCollection.cs
- DataGridViewTopLeftHeaderCell.cs
- Properties.cs
- QuadraticBezierSegment.cs
- MsmqBindingBase.cs
- AsyncOperationLifetimeManager.cs
- TextElement.cs
- EntityException.cs
- XmlSchemaAppInfo.cs
- TextDecoration.cs
- SequentialUshortCollection.cs
- XPathSelectionIterator.cs
- DataGridBoundColumn.cs
- XmlSchemaInclude.cs
- CapabilitiesPattern.cs
- TreeBuilder.cs
- SecurityTokenAttachmentMode.cs
- MethodBuilder.cs
- LambdaCompiler.Statements.cs
- XmlSchemaSubstitutionGroup.cs
- OdbcConnection.cs
- InternalMappingException.cs
- SR.cs