private SqlInternalConnectionSmi GetContextConnection(SqlConnectionString options, object providerInfo, DbConnection owningConnection)
        {
            SmiContext currentContext             = SmiContextFactory.Instance.GetCurrentContext();
            SqlInternalConnectionSmi contextValue = (SqlInternalConnectionSmi)currentContext.GetContextValue(0);

            if ((contextValue == null) || contextValue.IsConnectionDoomed)
            {
                if (contextValue != null)
                {
                    contextValue.Dispose();
                }
                contextValue = new SqlInternalConnectionSmi(options, currentContext);
                currentContext.SetContextValue(0, contextValue);
            }
            contextValue.Activate();
            return(contextValue);
        }
Exemple #2
0
        private SqlInternalConnectionSmi GetContextConnection(SqlConnectionString options, object providerInfo)
        {
            SmiContext smiContext = SmiContextFactory.Instance.GetCurrentContext();

            SqlInternalConnectionSmi result = (SqlInternalConnectionSmi)smiContext.GetContextValue((int)SmiContextFactory.ContextKey.Connection);

            // context connections are automatically re-useable if they exist unless they've been doomed.
            if (null == result || result.IsConnectionDoomed)
            {
                if (null != result)
                {
                    result.Dispose();   // A doomed connection is a messy thing.  Dispose of it promptly in nearest receptacle.
                }

                result = new SqlInternalConnectionSmi(options, smiContext);
                smiContext.SetContextValue((int)SmiContextFactory.ContextKey.Connection, result);
            }

            result.Activate();

            return(result);
        }