Exemplo n.º 1
0
        /// <summary>
        ///     由数据库连接串名称创建连接对象
        /// </summary>
        /// <param name="connectionStringName">数据库连接串名称</param>
        /// <returns></returns>
        private static DbConnection CreateConnectionWrapper(string connectionStringName)
        {
            PublicHelper.CheckArgument(connectionStringName, "connectionStringName");

            string providerInvariantName = "System.Data.SqlClient";
            string connectionString      = null;
            ConnectionStringSettings connectionStringSetting = ConfigurationManager.ConnectionStrings[connectionStringName];

            if (connectionStringSetting != null)
            {
                providerInvariantName = connectionStringSetting.ProviderName;
                connectionString      = connectionStringSetting.ConnectionString;
            }
            if (connectionString == null)
            {
                throw PublicHelper.ThrowComponentException("名称为“" + connectionStringName + "”数据库连接串的ConnectionString值为空。");
            }
            string wrappedConnectionString = "wrappedProvider=" + providerInvariantName + ";" + connectionString;
            EFCachingConnection connection = new EFCachingConnection
            {
                ConnectionString = wrappedConnectionString,
                CachingPolicy    = CachingPolicy.CacheAll,
                Cache            = InMemoryCache
            };

            return(connection);
        }
        /// <summary>
        /// 由数据库连接串名称创建连接对象
        /// </summary>
        /// <param name="connectionStringName">数据库连接串名称</param>
        /// <returns></returns>
        private DbConnection CreateConnectionWrapper(DbConnection cn)
        {
            string providerInvariantName = _cnStringSettings.ProviderName;
            string connectionString      = _cnStringSettings.ConnectionString;

            string wrappedConnectionString = "wrappedProvider=" + providerInvariantName + ";" + connectionString;

            EFCachingConnection connection = new EFCachingConnection(cn);

            connection.ConnectionString = wrappedConnectionString;
            connection.CachingPolicy    = CachingPolicy.CacheAll;
            connection.Cache            = InMemoryCache;

            return(connection);
        }
Exemplo n.º 3
0
        //private void AppendToLog(object sender, CommandExecutionEventArgs e)
        //{
        //    if (this.logOutput != null)
        //    {
        //        this.logOutput.WriteLine(e.ToTraceString().TrimEnd());
        //        this.logOutput.WriteLine();
        //    }
        //}

        //public TextWriter Log
        //{
        //    get { return this.logOutput; }
        //    set
        //    {
        //        if ((this.logOutput != null) != (value != null))
        //        {
        //            if (value == null)
        //            {
        //                CommandExecuting -= AppendToLog;
        //            }
        //            else
        //            {
        //                CommandExecuting += AppendToLog;
        //            }
        //        }

        //        this.logOutput = value;
        //    }
        //}


        #endregion

        /// <summary>
        /// Create warpped connection.
        /// </summary>
        /// <param name="nameOrConnectionString">The connection string name in the config file or actual value.</param>
        /// <param name="enableTracing">Enable entities tracing.</param>
        /// <param name="enableCaching">Enable entities caching.</param>
        /// <returns>The wrapped connection.</returns>
        protected static DbConnection CreateWrappedConnection(string nameOrConnectionString, bool enableTracing, bool enableCaching)
        {
            //-------------------------------------------------------
            //  Init
            //-------------------------------------------------------

            /* Setup variables */
            DbConnection connection            = null;
            string       providerInvariantName = "System.Data.SqlClient";
            string       connectionString      = nameOrConnectionString;

            if (enableTracing && !initializedTracingWrapper)
            {
                EFTracingProviderConfiguration.RegisterProvider();
#if DEBUG
                EFTracingProviderConfiguration.LogToConsole = true;
#endif

                initializedTracingWrapper = true;
            }

            if (enableCaching && !initializedCachingWrapper)
            {
                EFCachingProviderConfiguration.RegisterProvider();
                initializedCachingWrapper = true;
            }

            //-------------------------------------------------------
            //  Do we got a "name={DbConnectionNameInConfigFile} format?
            //-------------------------------------------------------
            int index = nameOrConnectionString.IndexOf('=');
            if (index > -1 &&
                nameOrConnectionString.Substring(0, index).Trim().Equals("name", StringComparison.OrdinalIgnoreCase))
            {
                /* Get the actual connection name */
                nameOrConnectionString = nameOrConnectionString.Substring(index + 1).Trim();
            }

            //-------------------------------------------------------
            //  Parse the connection string and provider invariant name
            //-------------------------------------------------------
            var connectionStringSetting = ConfigurationManager.ConnectionStrings[nameOrConnectionString];
            if (connectionStringSetting != null)
            {
                providerInvariantName = connectionStringSetting.ProviderName;
                connectionString      = connectionStringSetting.ConnectionString;
            }

            //-------------------------------------------------------
            //  Construct the basic underlaying connection
            //-------------------------------------------------------
            DbProviderFactory factory = DbProviderFactories.GetFactory(providerInvariantName);
            connection = factory.CreateConnection();
            try
            {
                connection.ConnectionString = connectionString;
            }
            catch { }

            //-------------------------------------------------------
            //  Should we use tracking
            //-------------------------------------------------------
            if (enableTracing)
            {
                connection = new EFTracingConnection(connection, "System.Data.SqlClient");
            }

            //-------------------------------------------------------
            //  Should we use caching
            //  NOTE: Caching test and wrapping MUST COME AFTER Tracing OTHERWISE IT'LL WON'T WORK!
            //-------------------------------------------------------

            if (enableCaching)
            {
                if (enableTracing)
                {
                    connection = new EFCachingConnection(connection, "EFTracingProvider");
                }
                else
                {
                    connection = new EFCachingConnection(connection, "System.Data.SqlClient");
                }
            }

            return(connection);
        }