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); }
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); }