예제 #1
0
        public static void RemoveDbProviderFactory(string invariant)
        {
            using (DataSet dataSet = ConfigurationManager.GetSection("system.data") as DataSet)
            {
                if (dataSet == null)
                {
                    // .NET Core
                    DbProviderFactories.UnregisterFactory(invariant);
                    return;
                }

                var rows = dataSet.Tables[0].Rows;

                foreach (DataRow r in rows)
                {
                    if (r["InvariantName"].ToString() == invariant)
                    {
                        rows.Remove(r);
                        return;
                    }
                }
            }

            throw new RuntimeException("Invariant name not found");
        }
        public void OneTimeTearDown()
        {
#if NETFRAMEWORK
            DbProviderFactories.UnregisterFactory(ProviderInvariantName);
#else
            DbProviderFactories.UnregisterFactory(ProviderInvariantName);
#endif
        }
    /// <summary>
    ///     Add required services for SQLite support.
    /// </summary>
    public static IUmbracoBuilder AddUmbracoSqliteSupport(this IUmbracoBuilder builder)
    {
        // TryAddEnumerable takes both TService and TImplementation into consideration (unlike TryAddSingleton)
        builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <ISqlSyntaxProvider, SqliteSyntaxProvider>());
        builder.Services.TryAddEnumerable(ServiceDescriptor
                                          .Singleton <IBulkSqlInsertProvider, SqliteBulkSqlInsertProvider>());
        builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <IDatabaseCreator, SqliteDatabaseCreator>());
        builder.Services.TryAddEnumerable(ServiceDescriptor
                                          .Singleton <IProviderSpecificMapperFactory, SqliteSpecificMapperFactory>());
        builder.Services.TryAddEnumerable(ServiceDescriptor
                                          .Singleton <IDatabaseProviderMetadata, SqliteDatabaseProviderMetadata>());

        builder.Services.TryAddEnumerable(ServiceDescriptor
                                          .Singleton <IDistributedLockingMechanism, SqliteDistributedLockingMechanism>());

        builder.Services.TryAddEnumerable(ServiceDescriptor
                                          .Singleton <IProviderSpecificInterceptor, SqliteAddPreferDeferredInterceptor>());
        builder.Services.TryAddEnumerable(ServiceDescriptor
                                          .Singleton <IProviderSpecificInterceptor, SqliteAddMiniProfilerInterceptor>());
        builder.Services.TryAddEnumerable(ServiceDescriptor
                                          .Singleton <IProviderSpecificInterceptor, SqliteAddRetryPolicyInterceptor>());

        DbProviderFactories.UnregisterFactory(Constants.ProviderName);
        DbProviderFactories.RegisterFactory(Constants.ProviderName, SqliteFactory.Instance);

        // Remove this registration in Umbraco 12
        DbProviderFactories.UnregisterFactory(Constants.ProviderNameLegacy);
        DbProviderFactories.RegisterFactory(Constants.ProviderNameLegacy, SqliteFactory.Instance);

        // Prevent accidental creation of SQLite database files
        builder.Services.PostConfigureAll <ConnectionStrings>(options =>
        {
            // Skip empty connection string and other providers
            if (!options.IsConnectionStringConfigured() || (options.ProviderName != Constants.ProviderName && options.ProviderName != Constants.ProviderNameLegacy))
            {
                return;
            }

            var connectionStringBuilder = new SqliteConnectionStringBuilder(options.ConnectionString);
            if (connectionStringBuilder.Mode == SqliteOpenMode.ReadWriteCreate)
            {
                connectionStringBuilder.Mode = SqliteOpenMode.ReadWrite;
                options.ConnectionString     = connectionStringBuilder.ConnectionString;
            }
        });

        return(builder);
    }
예제 #4
0
        private static void RegisterAdoNetProvider(Type providerFactoryType)
        {
#if NET452
            var row = _providerTable.NewRow();
            row["Name"]                  = "SqlClient Data Provider";
            row["Description"]           = ".Net Framework Data Provider for SqlServer";
            row["InvariantName"]         = SqlClientInvariantName;
            row["AssemblyQualifiedName"] = providerFactoryType.AssemblyQualifiedName;

            _providerTable.Rows.Remove(_providerTable.Rows.Find(SqlClientInvariantName));
            _providerTable.Rows.Add(row);
#else
            DbProviderFactories.UnregisterFactory(SqlClientInvariantName);
            DbProviderFactories.RegisterFactory(SqlClientInvariantName, providerFactoryType.AssemblyQualifiedName);
#endif
        }
    /// <summary>
    /// Add required services for SQLite support.
    /// </summary>
    public static IUmbracoBuilder AddUmbracoSqliteSupport(this IUmbracoBuilder builder)
    {
        // TryAddEnumerable takes both TService and TImplementation into consideration (unlike TryAddSingleton)
        builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <ISqlSyntaxProvider, SqliteSyntaxProvider>());
        builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <IBulkSqlInsertProvider, SqliteBulkSqlInsertProvider>());
        builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <IDatabaseCreator, SqliteDatabaseCreator>());
        builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <IProviderSpecificMapperFactory, SqliteSpecificMapperFactory>());
        builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <IDatabaseProviderMetadata, SqliteDatabaseProviderMetadata>());

        builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <IDistributedLockingMechanism, SqliteDistributedLockingMechanism>());

        builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <IProviderSpecificInterceptor, SqliteAddPreferDeferredInterceptor>());
        builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <IProviderSpecificInterceptor, SqliteAddMiniProfilerInterceptor>());
        builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <IProviderSpecificInterceptor, SqliteAddRetryPolicyInterceptor>());

        DbProviderFactories.UnregisterFactory(Constants.ProviderName);
        DbProviderFactories.RegisterFactory(Constants.ProviderName, Microsoft.Data.Sqlite.SqliteFactory.Instance);


        builder.Services.PostConfigure <ConnectionStrings>(Core.Constants.System.UmbracoConnectionName, opt =>
        {
            if (!opt.IsConnectionStringConfigured())
            {
                return;
            }

            if (opt.ProviderName != Constants.ProviderName)
            {
                // Not us.
                return;
            }

            // Prevent accidental creation of database files.
            var connectionStringBuilder = new SqliteConnectionStringBuilder(opt.ConnectionString);
            if (connectionStringBuilder.Mode == SqliteOpenMode.ReadWriteCreate)
            {
                connectionStringBuilder.Mode = SqliteOpenMode.ReadWrite;
            }

            opt.ConnectionString = connectionStringBuilder.ConnectionString;
        });

        return(builder);
    }
예제 #6
0
    /// <summary>
    /// Add required services for SQL Server support.
    /// </summary>
    public static IUmbracoBuilder AddUmbracoSqlServerSupport(this IUmbracoBuilder builder)
    {
        builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <ISqlSyntaxProvider, SqlServerSyntaxProvider>());
        builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <IBulkSqlInsertProvider, SqlServerBulkSqlInsertProvider>());
        builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <IDatabaseCreator, SqlServerDatabaseCreator>());

        builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <IDatabaseProviderMetadata, SqlLocalDbDatabaseProviderMetadata>());
        builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <IDatabaseProviderMetadata, SqlServerDatabaseProviderMetadata>());
        builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <IDatabaseProviderMetadata, SqlAzureDatabaseProviderMetadata>());

        builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <IDistributedLockingMechanism, SqlServerDistributedLockingMechanism>());

        builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <IProviderSpecificInterceptor, SqlServerAddMiniProfilerInterceptor>());
        builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <IProviderSpecificInterceptor, SqlServerAddRetryPolicyInterceptor>());

        DbProviderFactories.UnregisterFactory(Constants.ProviderName);
        DbProviderFactories.RegisterFactory(Constants.ProviderName, SqlClientFactory.Instance);

        return(builder);
    }
예제 #7
0
        public static void RemoveAllDbProviderFactories()
        {
            using (DataSet dataSet = ConfigurationManager.GetSection("system.data") as DataSet)
            {
                if (dataSet == null)
                {
                    // .NET Core
                    foreach (var n in DbProviderFactories.GetProviderInvariantNames())
                    {
                        DbProviderFactories.UnregisterFactory(n);
                    }
                    return;
                }

                var rows = dataSet.Tables[0].Rows;

                while (rows.Count > 0)
                {
                    rows.RemoveAt(rows.Count - 1);
                }
            }
        }
예제 #8
0
    /// <summary>
    ///     Add required services for SQL Server support.
    /// </summary>
    public static IUmbracoBuilder AddUmbracoSqlServerSupport(this IUmbracoBuilder builder)
    {
        builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <ISqlSyntaxProvider, SqlServerSyntaxProvider>());
        builder.Services.TryAddEnumerable(ServiceDescriptor
                                          .Singleton <IBulkSqlInsertProvider, SqlServerBulkSqlInsertProvider>());
        builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <IDatabaseCreator, SqlServerDatabaseCreator>());

        builder.Services.TryAddEnumerable(ServiceDescriptor
                                          .Singleton <IDatabaseProviderMetadata, SqlLocalDbDatabaseProviderMetadata>());
        builder.Services.TryAddEnumerable(ServiceDescriptor
                                          .Singleton <IDatabaseProviderMetadata, SqlServerDatabaseProviderMetadata>());
        builder.Services.TryAddEnumerable(ServiceDescriptor
                                          .Singleton <IDatabaseProviderMetadata, SqlAzureDatabaseProviderMetadata>());

        builder.Services.TryAddEnumerable(ServiceDescriptor
                                          .Singleton <IDistributedLockingMechanism, SqlServerDistributedLockingMechanism>());

        builder.Services.TryAddEnumerable(ServiceDescriptor
                                          .Singleton <IProviderSpecificInterceptor, SqlServerAddMiniProfilerInterceptor>());
        builder.Services.TryAddEnumerable(ServiceDescriptor
                                          .Singleton <IProviderSpecificInterceptor, SqlServerAddRetryPolicyInterceptor>());

        DbProviderFactories.UnregisterFactory(Constants.ProviderName);
        DbProviderFactories.RegisterFactory(Constants.ProviderName, SqlClientFactory.Instance);

        // Support provider name set by the configuration API for connection string environment variables
        builder.Services.ConfigureAll <ConnectionStrings>(options =>
        {
            if (options.ProviderName == "System.Data.SqlClient")
            {
                options.ProviderName = Constants.ProviderName;
            }
        });

        return(builder);
    }
예제 #9
0
 public void Setup()
 {
     DbProviderFactories.UnregisterFactory("MySql.Data.MySqlClient");
     //DbProviderFactories.RegisterFactory("MySql.Data.MySqlClient", MySqlClientFactory.Instance);
 }
예제 #10
0
 /// <summary>
 /// 取消注册的数据库工厂
 /// </summary>
 /// <param name="providerName">名称,唯一</param>
 public static bool UnregisterDbProvider(string providerName)
 {
     return(DbProviderFactories.UnregisterFactory(providerName));
 }