Esempio n. 1
0
        /// <summary>
        /// Obtient une connexion depuis la factory.
        /// </summary>
        /// <param name="connectionString">Chaine de connexion.</param>
        /// <param name="providerName">Nom du provider.</param>
        /// <returns>Instance de la connexion.</returns>
        private DbConnection GetConnection(string connectionString, string providerName)
        {
            DbConnection      connexion = null;
            DbProviderFactory dbFactory = null;

            // DbProviderFactories n'existe pas en .Net Standard 2.0
            bool ok = DbProviderFactories.TryGetFactory(providerName, out dbFactory);

            if (!ok)
            {
                RegisterFactory(providerName);
                bool retryOk = DbProviderFactories.TryGetFactory(providerName, out dbFactory);

                if (!retryOk)
                {
                    throw new Exception($"Impossible d'obtenir la factory à partir du provider {providerName}");
                }
            }

            // Recovery of the connection in the factory
            connexion = dbFactory.CreateConnection();
            connexion.ConnectionString = connectionString;

            // It returns the connection instance
            return(connexion);
        }
Esempio n. 2
0
        /// <summary>
        /// 加载指定数据库类型的DbProviderFactory
        /// </summary>
        /// <param name="providerType">数据库类型枚举</param>
        /// <returns></returns>
        private static DbProviderFactory ImportDbProviderFactory(DbProviderType providerType)
        {
            string providerName = providerInvariantNames[providerType];

A:
            if (!DbProviderFactories.TryGetFactory(providerType.ToString(), out DbProviderFactory factory))
            {
                //var wsd = DbProviderFactories.GetProviderInvariantNames();

                //Assembly assembly = Assembly.Load(providerName);
                //Type type = assembly.GetType("System.Data.SqlClient.SqlClientFactory"); //System.Data.SqlClient.SqlClientFactory

                //AddFactory(providerType, type);//type//"System.Data.SqlClient.SqlClientFactory"

                AddFactory(providerType.ToString(), providerName, true);

                //AddFactory<System.Data.SqlClient.SqlClientFactory>("asd");
                goto A;
            }

            //DbProviderFactory factory;
            //try
            //{
            //    //从全局程序集中查找
            //    factory = DbProviderFactories.GetFactory(providerName);
            //}
            //catch //(ArgumentException e)
            //{
            //    factory = null;
            //}
            return(factory);
        }
Esempio n. 3
0
        private static void RegisterDbProviderFactories()
        {
            var dbProviderFactories = Config.GetSection("DbProviderFactories").GetChildren();

            foreach (IConfigurationSection section in dbProviderFactories)
            {
                if (!DbProviderFactories.TryGetFactory(section.Key, out _))
                {
                    DbProviderFactories.RegisterFactory(section.Key, section.Value);
                }
            }
        }
Esempio n. 4
0
        private static DbProviderConnectionFactory CreateConnectionFactory(IConfiguration configuration)
        {
            var providerInvarianName = "System.Data.SqlClient";

            if (!DbProviderFactories.TryGetFactory(providerInvarianName, out var factory))
            {
                DbProviderFactories.RegisterFactory(providerInvarianName, SqlClientFactory.Instance);
                factory = DbProviderFactories.GetFactory(providerInvarianName);
            }

            return(new DbProviderConnectionFactory(factory, configuration));
        }
        public static void Init()
        {
            if (DbProviderFactories.TryGetFactory("DataProvider", out DbProviderFactory factory) == false)
            {
                DbProviderFactories.RegisterFactory("DataProvider", SqlClientFactory.Instance);
            }

            if (Configuration == null)
            {
                var configurationBuilder = new ConfigurationBuilder();
                Configuration = configurationBuilder.AddJsonFile("appSettings.json").Build();
            }
        }
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddRouting();
            services.AddMvc(config =>
            {
            });

            services.AddGenericBackend()
            .ConfigureMiddleware(m =>
            {
                m.AlwaysWrapJson = true;
                m.Prefix         = "/rest";
            })
            .ConfigureOpenApiGeneration(o =>
            {
                o.PersistResultSets          = true;
                o.ParameterFieldsAreRequired = true;
                o.ResponseFieldsAreRequired  = true;
                o.UseSwagger2 = false;
            })
            .AddFileSupport()
            .AddXmlSupport()
            .AddSystemParameters();
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo {
                    Title = "My API", Version = "v1"
                });
                c.AddGenericBackend();
            });
            if (!DbProviderFactories.TryGetFactory("System.Data.SqlClient", out var _))
            {
                DbProviderFactories.RegisterFactory("System.Data.SqlClient", System.Data.SqlClient.SqlClientFactory.Instance);
            }
            services.AddTransient <Filter.IRequestInterceptor, TestRequestInterceptor>();
            services.AddScoped(typeof(DbConnection), (s) =>
            {
                var conf    = s.GetRequiredService <IConfiguration>();
                var hostenv = s.GetRequiredService <IHostingEnvironment>();
                var constr  = conf["ConnectionStrings:DefaultConnection"];
                constr      = constr.Replace("{{workdir}}", hostenv.ContentRootPath);

                return(Kull.Data.DatabaseUtils.GetConnectionFromEFString(constr, true));
            });
        }
Esempio n. 7
0
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddRouting();
            services.AddMvc(config =>
            {
            });

            services.AddGenericBackend()
            .ConfigureMiddleware(m =>
            {
                m.Prefix = "/rest";
            })
            .ConfigureOpenApiGeneration(o =>
            {
                o.PersistResultSets = true;
            })
            .AddFileSupport()
            .AddXmlSupport()
            .AddSystemParameters();
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo {
                    Title = "My API", Version = "v1"
                });
                c.AddGenericBackend();
            });
            if (!DbProviderFactories.TryGetFactory("System.Data.SqlClient", out var _))
            {
                DbProviderFactories.RegisterFactory("System.Data.SqlClient", System.Data.SqlClient.SqlClientFactory.Instance);
            }
            services.AddScoped(typeof(DbConnection), (s) =>
            {
                var conf   = s.GetRequiredService <IConfiguration>();
                var constr = conf["ConnectionStrings:DefaultConnection"];
                return(Kull.Data.DatabaseUtils.GetConnectionFromEFString(constr, true));
            });
        }
Esempio n. 8
0
        /// <summary>
        /// 根据提供程序的固定名称获取<see cref="DbProviderFactory"/>对象。
        /// </summary>
        /// <param name="providerName"></param>
        /// <returns></returns>
        public virtual DbProviderFactory GetFactory(string providerName)
        {
#if NETFRAMEWORK
            return(DbProviderFactories.GetFactory(providerName));
#else
            if (DbProviderFactories.TryGetFactory(providerName, out DbProviderFactory providerFactory))
            {
                return(providerFactory);
            }
            var providerFactoryType = typeof(DbProviderFactory);
            foreach (var assemblie in AppDomain.CurrentDomain.GetAssemblies())
            {
                if (assemblie.GlobalAssemblyCache)
                {
                    continue;
                }
                var factoryType = assemblie.GetTypes().FirstOrDefault((t) => t.Namespace == providerName && t.IsSubclassOf(providerFactoryType));
                if (factoryType != null)
                {
                    DbProviderFactories.RegisterFactory(factoryType.Namespace, factoryType);
                    return(DbProviderFactories.GetFactory(providerName));
                }
            }
            var path = System.IO.Path.GetFullPath(System.IO.Path.ChangeExtension(providerName, "dll"));
            if (System.IO.File.Exists(path))
            {
                var assembly    = Assembly.LoadFile(path);
                var factoryType = assembly.GetTypes().FirstOrDefault((t) => t.Namespace == providerName && t.IsSubclassOf(providerFactoryType));
                if (factoryType != null)
                {
                    DbProviderFactories.RegisterFactory(factoryType.Namespace, factoryType);
                    return(DbProviderFactories.GetFactory(providerName));
                }
            }
            return(null);
#endif
        }
Esempio n. 9
0
        private DbProviderFactory GetDbProviderFactory(string providerInvariantName)
        {
            bool providerExist = DbProviderFactories.TryGetFactory(providerInvariantName, out DbProviderFactory dbProviderFactory);

            if (providerExist)
            {
                return(dbProviderFactory);
            }

            Assembly assembly = Assembly.Load(providerInvariantName);

            if (assembly != null)
            {
                Type type = null;
                foreach (var item in assembly.GetTypes())
                {
                    if (item.BaseType == typeof(DbProviderFactory) && item.Name.EndsWith("Factory"))
                    {
                        type = item;
                        break;
                    }
                }
                if (type != null)
                {
                    FieldInfo instanceField = type.GetField("Instance");
                    if (instanceField != null)
                    {
                        var instance = instanceField.GetValue(null);
                        if (instance != null && instance is DbProviderFactory)
                        {
                            return(instance as DbProviderFactory);
                        }
                    }
                }
            }
            return(null);
        }