Exemple #1
0
        public SenparcEntities CreateDbContext(string[] args)
        {
            //修复 https://github.com/NeuCharFramework/NCF/issues/13 发现的问题(在非Web环境下无法得到网站根目录路径)
            IRegisterService register = RegisterService.Start(new SenparcSetting());

            SiteConfig.SenparcCoreSetting.DatabaseName = "Local";                                      //指定数据库配置,对应 Appp_Data/Database/SenparcConfig.config 下的配置

            CO2NET.Config.RootDictionaryPath = Path.Combine(AppContext.BaseDirectory, "..\\..\\..\\"); //


            //如果运行 Add-Migration 命令,并且获取不到正确的网站根目录,此处可能无法自动获取到连接字符串(上述#13问题),
            //也可通过下面已经注释的的提供默认值方式解决(不推荐)
            var sqlConnection = SenparcDatabaseConfigs.ClientConnectionString; //?? "Server=.\\;Database=NCF;Trusted_Connection=True;integrated security=True;";

            Console.WriteLine("============= 连接字符串 ===============");
            Console.WriteLine(SenparcDatabaseConfigs.ClientConnectionString);
            Console.WriteLine("========================================");

            Service.Register systemServiceRegister = new Service.Register();

            XncfRegisterManager.XncfDatabaseList.Add(systemServiceRegister);//添加注册

            var builder = new DbContextOptionsBuilder <SenparcEntities>();

            builder.UseSqlServer(sqlConnection, b => systemServiceRegister.DbContextOptionsAction(b, "Senparc.Web"));//beta5
            return(new SenparcEntities(builder.Options));
        }
Exemple #2
0
        public async Task <IActionResult> OnGetAsync()
        {
            try
            {
                var adminUserInfo = await _accountInfoService.GetObjectAsync(z => true);//检查是否已初始化

                if (adminUserInfo == null)
                {
                    throw new Exception("需要初始化");
                }
            }
            catch (Exception)
            {
                //开始安装系统模块(Service)
                Senparc.Service.Register serviceRegister = new Service.Register();
                await serviceRegister.InstallOrUpdateAsync(_serviceProvider, Scf.Core.Enums.InstallOrUpdate.Install);

                //开始安装系统模块(Admin)
                Senparc.Areas.Admin.Register adminRegister = new Areas.Admin.Register();
                await adminRegister.InstallOrUpdateAsync(_serviceProvider, Scf.Core.Enums.InstallOrUpdate.Install);

                //((SenparcEntities)_accountInfoService.BaseData.BaseDB.BaseDataContext).ResetMigrate();//重置合并状态
                //((SenparcEntities)_accountInfoService.BaseData.BaseDB.BaseDataContext).Migrate();//进行合并
                return(Page());
            }

            //base.Response.StatusCode = 404;
            return(new StatusCodeResult(404));//已经安装完毕,且存在管理员则不进行安装
        }
Exemple #3
0
        public async Task <IActionResult> OnGetAsync()
        {
            try
            {
                MultipleDatabaseType = DatabaseConfigurationFactory.Instance.Current.MultipleDatabaseType;

                var adminUserInfo = await _accountInfoService.GetObjectAsync(z => true);//检查是否已初始化

                if (adminUserInfo == null)
                {
                    throw new Exception("需要初始化");
                }
            }
            catch (Exception)
            {
                {
                    //开始安装系统模块(Service)
                    Senparc.Service.Register serviceRegister = new Service.Register();
                    await serviceRegister.InstallOrUpdateAsync(_serviceProvider, Ncf.Core.Enums.InstallOrUpdate.Install);

                    //启用系统模块(Service)
                    var serviceModule = await _xncfModuleService.GetObjectAsync(z => z.Uid == serviceRegister.Uid);

                    serviceModule.UpdateState(Ncf.Core.Enums.XncfModules_State.开放);
                }

                {
                    //开始安装系统模块(Admin)
                    Senparc.Areas.Admin.Register adminRegister = new Areas.Admin.Register();
                    await adminRegister.InstallOrUpdateAsync(_serviceProvider, Ncf.Core.Enums.InstallOrUpdate.Install);

                    //启用系统模块(Admin)
                    var adminModule = await _xncfModuleService.GetObjectAsync(z => z.Uid == adminRegister.Uid);

                    adminModule.UpdateState(Ncf.Core.Enums.XncfModules_State.开放);

                    //一次性保存修改
                    await _xncfModuleService.SaveObjectAsync(adminModule).ConfigureAwait(false);
                }

                //((SenparcEntities)_accountInfoService.BaseData.BaseDB.BaseDataContext).ResetMigrate();//重置合并状态
                //((SenparcEntities)_accountInfoService.BaseData.BaseDB.BaseDataContext).Migrate();//进行合并
                return(Page());
            }

            //base.Response.StatusCode = 404;
            return(new StatusCodeResult(404));//已经安装完毕,且存在管理员则不进行安装
        }
Exemple #4
0
        public SenparcEntities CreateDbContext(string[] args)
        {
            SiteConfig.SenparcCoreSetting.DatabaseName = "Local";                                                         //指定数据库配置,对应 Appp_Data/Database/SenparcConfig.config 下的配置

            CO2NET.Config.RootDictionaryPath = Path.Combine(AppContext.BaseDirectory, "..\\..\\..\\", "..\\Senparc.Web"); //

            var repository        = LogManager.CreateRepository("NETCoreRepository");
            var serviceCollection = new ServiceCollection();
            var configBuilder     = new ConfigurationBuilder();
            var config            = configBuilder.Build();
            var senparcSetting    = new SenparcSetting()
            {
                IsDebug = true
            };

            serviceCollection.AddSenparcGlobalServices(config);
            serviceCollection.AddMemoryCache();//使用内存缓存
            //修复 https://github.com/SenparcCoreFramework/SCF/issues/13 发现的问题(在非Web环境下无法得到网站根目录路径)
            IRegisterService register = RegisterService.Start(senparcSetting);

            //如果运行 Add-Migration 命令,并且获取不到正确的网站根目录,此处可能无法自动获取到连接字符串(上述#13问题),
            //也可通过下面已经注释的的提供默认值方式解决(不推荐)
            var sqlConnection = SenparcDatabaseConfigs.ClientConnectionString; //?? "Server=.\\;Database=SCF;Trusted_Connection=True;integrated security=True;";

            Console.WriteLine("============================");
            Console.WriteLine(SenparcDatabaseConfigs.ClientConnectionString);
            Console.WriteLine("============================");

            Service.Register systemServiceRegister = new Service.Register();

            Senparc.Scf.XscfBase.Register.XscfDatabaseList.Add(systemServiceRegister);//添加注册

            var builder = new DbContextOptionsBuilder <SenparcEntities>();

            //builder.UseSqlServer(sqlConnection, b => systemServiceRegister.DbContextOptionsAction(b, "Senparc.Web"));//beta4
            builder.UseSqlServer(sqlConnection, b => systemServiceRegister.DbContextOptionsAction(b, "Senparc.Service"));//beta5
            return(new SenparcEntities(builder.Options));
        }
Exemple #5
0
        public async Task <IActionResult> OnGetAsync()
        {
            try
            {
                Console.WriteLine("进入安装程序,检测是否需要初始化");

                MultipleDatabaseType = DatabaseConfigurationFactory.Instance.Current.MultipleDatabaseType;
                var adminUserInfo = await _accountInfoService.GetObjectAsync(z => true);//检查是否已初始化

                if (adminUserInfo == null)
                {
                    throw new Exception("需要初始化");
                }
            }
            catch (Exception)
            {
                {
                    Senparc.Service.Register serviceRegister = new Service.Register();

                    //添加初始化多租户信息
                    if (SiteConfig.SenparcCoreSetting.EnableMultiTenant)
                    {
                        var httpContext = _httpContextAccessor.Value.HttpContext;
                        try
                        {
                            //初始化数据库
                            var(initDbSuccess, initDbMsg) = await serviceRegister.InitDatabase(_serviceProvider, _tenantInfoService, _httpContextAccessor.Value.HttpContext);

                            if (!initDbSuccess)
                            {
                                throw new NcfDatabaseException($"ServiceRegister.InitDatabase 失败:{initDbMsg}", DatabaseConfigurationFactory.Instance.Current.GetType());
                            }

                            var tenantInfo = await _tenantInfoService.CreateInitTenantInfoAsync(httpContext);

                            //重置租户状态
                            CreatedRequestTenantInfo = await _tenantInfoService.SetScopedRequestTenantInfoAsync(httpContext);

                            TenantInfoDto = _tenantInfoService.Mapper.Map <TenantInfoDto>(await _tenantInfoService.GetObjectAsync(z => z.Id == CreatedRequestTenantInfo.Id));
                        }
                        catch (Exception ex)
                        {
                            //如果已经安装过,则不处理
                            //TODO:特定的Exception
                            Console.WriteLine(ex.Message);
                            throw;
                        }
                        finally
                        {
                        }
                    }

                    //开始安装系统模块(Service)
                    await serviceRegister.InstallOrUpdateAsync(_serviceProvider, Ncf.Core.Enums.InstallOrUpdate.Install);

                    //启用系统模块(Service)
                    var serviceModule = await _xncfModuleService.GetObjectAsync(z => z.Uid == serviceRegister.Uid);

                    serviceModule.UpdateState(Ncf.Core.Enums.XncfModules_State.开放);
                }

                {
                    //开始安装系统模块(Admin)
                    Senparc.Areas.Admin.Register adminRegister = new Areas.Admin.Register();
                    await adminRegister.InstallOrUpdateAsync(_serviceProvider, Ncf.Core.Enums.InstallOrUpdate.Install);

                    //启用系统模块(Admin)
                    var adminModule = await _xncfModuleService.GetObjectAsync(z => z.Uid == adminRegister.Uid);

                    adminModule.UpdateState(Ncf.Core.Enums.XncfModules_State.开放);

                    //一次性保存修改
                    await _xncfModuleService.SaveObjectAsync(adminModule).ConfigureAwait(false);
                }

                //((SenparcEntities)_accountInfoService.BaseData.BaseDB.BaseDataContext).ResetMigrate();//重置合并状态
                //((SenparcEntities)_accountInfoService.BaseData.BaseDB.BaseDataContext).Migrate();//进行合并
                return(Page());
            }

            //base.Response.StatusCode = 404;
            return(new StatusCodeResult(404));//已经安装完毕,且存在管理员则不进行安装
        }