示例#1
0
        private void Initialize()
        {
            var connectionStrings   = Configuraion.GetConnectionStrings();
            var dbConnectionStrings = Configuraion.GetConnectionStrings(dbid);

            if (Convert.ToBoolean(Configuraion["core.multi-hosted.config-only"] ?? "false"))
            {
                foreach (var cs in Configuraion.GetConnectionStrings())
                {
                    if (cs.Name.StartsWith(dbid + "."))
                    {
                        var name = cs.Name.Substring(dbid.Length + 1);
                        regions[name] = new HostedSolution(Configuraion, TenantDomainValidator, TimeZoneConverter, DbRegistry, cs, TariffServiceStorage, Options, name);
                    }
                }

                regions[dbid] = new HostedSolution(Configuraion, TenantDomainValidator, TimeZoneConverter, DbRegistry, dbConnectionStrings, TariffServiceStorage, Options);
                if (!regions.ContainsKey(string.Empty))
                {
                    regions[string.Empty] = new HostedSolution(Configuraion, TenantDomainValidator, TimeZoneConverter, DbRegistry, dbConnectionStrings, TariffServiceStorage, Options);
                }
            }
            else
            {
                var find = false;
                foreach (var cs in connectionStrings)
                {
                    if (cs.Name.StartsWith(dbid + "."))
                    {
                        var name = cs.Name.Substring(dbid.Length + 1);
                        regions[name] = new HostedSolution(Configuraion, TenantDomainValidator, TimeZoneConverter, DbRegistry, cs, TariffServiceStorage, Options, name);
                        find          = true;
                    }
                }
                if (find)
                {
                    regions[dbid] = new HostedSolution(Configuraion, TenantDomainValidator, TimeZoneConverter, DbRegistry, dbConnectionStrings, TariffServiceStorage, Options);
                    if (!regions.ContainsKey(string.Empty))
                    {
                        regions[string.Empty] = new HostedSolution(Configuraion, TenantDomainValidator, TimeZoneConverter, DbRegistry, dbConnectionStrings, TariffServiceStorage, Options);
                    }
                }
                else
                {
                    foreach (var connectionString in connectionStrings)
                    {
                        try
                        {
                            using var db = DbOptions.Get(connectionString.Name);
                            var q = new SqlQuery("regions")
                                    .Select("region")
                                    .Select("connection_string")
                                    .Select("provider");
                            db.ExecuteList(q)
                            .ForEach(r =>
                            {
                                var cs = new System.Configuration.ConnectionStringSettings((string)r[0], (string)r[1], (string)r[2]);
                                if (!DbRegistry.IsDatabaseRegistered(cs.Name))
                                {
                                    DbRegistry.RegisterDatabase(cs.Name, cs);
                                }

                                if (!regions.ContainsKey(string.Empty))
                                {
                                    regions[string.Empty] = new HostedSolution(Configuraion, TenantDomainValidator, TimeZoneConverter, DbRegistry, cs, TariffServiceStorage, Options, cs.Name);
                                }

                                regions[cs.Name] = new HostedSolution(Configuraion, TenantDomainValidator, TimeZoneConverter, DbRegistry, cs, TariffServiceStorage, Options, cs.Name);
                            });
                        }
                        catch (DbException) { }
                    }
                }
            }
        }
        private void Initialize()
        {
            var connectionStrings   = Configuraion.GetConnectionStrings();
            var dbConnectionStrings = Configuraion.GetConnectionStrings(dbid);

            if (Convert.ToBoolean(Configuraion["core.multi-hosted.config-only"] ?? "false"))
            {
                foreach (var cs in Configuraion.GetConnectionStrings())
                {
                    if (cs.Name.StartsWith(dbid + "."))
                    {
                        var name = cs.Name.Substring(dbid.Length + 1);
                        regions[name] = HostedSolutionOptions.Get(cs.Name);
                    }
                }

                regions[dbid] = HostedSolutionOptions.Get(dbid);
                if (!regions.ContainsKey(string.Empty))
                {
                    regions[string.Empty] = HostedSolutionOptions.Get(dbid);
                }
            }
            else
            {
                var find = false;
                foreach (var cs in connectionStrings)
                {
                    var dbContextOptionsBuilder = new DbContextOptionsBuilder <DbContext>();
                    var options = dbContextOptionsBuilder
                                  .UseMySql(cs.ConnectionString)
                                  .UseLoggerFactory(LoggerFactory)
                                  .Options;

                    using var dbContext = new DbContext(options);

                    if (cs.Name.StartsWith(dbid + "."))
                    {
                        var name = cs.Name.Substring(dbid.Length + 1);
                        regions[name] = HostedSolutionOptions.Get(name);
                        find          = true;
                    }
                }
                if (find)
                {
                    regions[dbid] = HostedSolutionOptions.Get(dbid);
                    if (!regions.ContainsKey(string.Empty))
                    {
                        regions[string.Empty] = HostedSolutionOptions.Get(dbid);
                    }
                }
                else
                {
                    foreach (var connectionString in connectionStrings)
                    {
                        try
                        {
                            var dbContextOptionsBuilder = new DbContextOptionsBuilder <DbContext>();
                            var options = dbContextOptionsBuilder
                                          .UseMySql(connectionString.ConnectionString)
                                          .UseLoggerFactory(LoggerFactory)
                                          .Options;

                            using var dbContext = new DbContext(options);

                            var q = dbContext.Regions.ToList();

                            foreach (var r in q)
                            {
                                var cs = new System.Configuration.ConnectionStringSettings(r.Region, r.ConnectionString, r.Provider);

                                if (!regions.ContainsKey(string.Empty))
                                {
                                    regions[string.Empty] = HostedSolutionOptions.Get(cs.Name);
                                }

                                regions[cs.Name] = HostedSolutionOptions.Get(cs.Name);
                            }
                        }
                        catch (DbException) { }
                    }
                }
            }
        }