Пример #1
0
        protected bool InitCultures(InitCulture culture, MixCmsContext context, IDbContextTransaction transaction)
        {
            bool isSucceed = true;

            try
            {
                if (context.MixCulture.Count() == 0)
                {
                    // EN-US

                    var enCulture = new MixCulture()
                    {
                        Specificulture = culture.Specificulture,
                        FullName       = culture.FullName,
                        Description    = culture.Description,
                        Icon           = culture.Icon,
                        Alias          = culture.Alias,
                        Status         = (int)MixEnums.MixContentStatus.Published
                    };
                    context.Entry(enCulture).State = EntityState.Added;

                    context.SaveChanges();
                }
            }
            catch
            {
                isSucceed = false;
            }
            return(isSucceed);
        }
Пример #2
0
 protected static bool InitCultures(InitCulture culture, MixCmsContext context, IDbContextTransaction transaction)
 {
     V_0 = true;
     try
     {
         if (context.get_MixCulture().Count <MixCulture>() == 0)
         {
             stackVariable5 = new MixCulture();
             stackVariable5.set_Id(1);
             stackVariable5.set_Specificulture(culture.get_Specificulture());
             stackVariable5.set_FullName(culture.get_FullName());
             stackVariable5.set_Description(culture.get_Description());
             stackVariable5.set_Icon(culture.get_Icon());
             stackVariable5.set_Alias(culture.get_Alias());
             stackVariable5.set_Status(2.ToString());
             stackVariable5.set_CreatedDateTime(DateTime.get_UtcNow());
             context.Entry <MixCulture>(stackVariable5).set_State(4);
             dummyVar0 = context.SaveChanges();
         }
     }
     catch
     {
         dummyVar1 = exception_0;
         V_0       = false;
     }
     return(V_0);
 }
Пример #3
0
        private async Task <bool> InitConfigurationsAsync(InitCulture culture, SioCmsContext context, IDbContextTransaction transaction)
        {
            /* Init Configs */
            var configurations   = FileRepository.Instance.GetFile(SioConstants.CONST_FILE_CONFIGURATIONS, "data", true, "{}");
            var obj              = JObject.Parse(configurations.Content);
            var arrConfiguration = obj["data"].ToObject <List <SioConfiguration> >();
            var result           = await ViewModels.SioConfigurations.ReadMvcViewModel.ImportConfigurations(arrConfiguration, culture.Specificulture, context, transaction);

            return(result.IsSucceed);
        }
Пример #4
0
        private async Task <bool> InitLanguagesAsync(InitCulture culture, MixCmsContext context, IDbContextTransaction transaction)
        {
            /* Init Languages */
            var configurations = FileRepository.Instance.GetFile(MixConstants.CONST_FILE_LANGUAGES, "data", true, "{}");
            var obj            = JObject.Parse(configurations.Content);
            var arrLanguage    = obj["data"].ToObject <List <MixLanguage> >();
            var result         = await ViewModels.MixLanguages.ReadMvcViewModel.ImportLanguages(arrLanguage, culture.Specificulture, context, transaction);

            return(result.IsSucceed);
        }
Пример #5
0
        private async Task <bool> InitConfigurationsAsync(string siteName, InitCulture culture, MixCmsContext context, IDbContextTransaction transaction)
        {
            /* Init Configs */
            var configurations   = FileRepository.Instance.GetFile(MixConstants.CONST_FILE_CONFIGURATIONS, "data", true, "{}");
            var obj              = JObject.Parse(configurations.Content);
            var arrConfiguration = obj["data"].ToObject <List <MixConfiguration> >();

            if (!string.IsNullOrEmpty(siteName))
            {
                arrConfiguration.Find(c => c.Keyword == "SiteName").Value = siteName;
            }
            var result = await ViewModels.MixConfigurations.ReadMvcViewModel.ImportConfigurations(arrConfiguration, culture.Specificulture, context, transaction);

            return(result.IsSucceed);
        }
        protected bool InitCultures(InitCulture culture, SiocCmsContext context, IDbContextTransaction transaction)
        {
            bool isSucceed = true;

            try
            {
                if (context.SiocCulture.Count() == 0)
                {
                    // EN-US

                    var enCulture = new SiocCulture()
                    {
                        Specificulture = culture.Specificulture,
                        FullName       = culture.FullName,
                        Description    = culture.Description,
                        Icon           = culture.Icon,
                        Alias          = culture.Alias
                    };
                    context.Entry(enCulture).State = EntityState.Added;

                    //var vnCulture = new SiocCulture()
                    //{
                    //    Specificulture = "vi-vn",
                    //    FullName = "Vietnam",
                    //    Description = "Việt Nam",
                    //    Icon = "flag-icon-vn",
                    //    Alias = "VN"
                    //};
                    //context.Entry(vnCulture).State = EntityState.Added;

                    context.SaveChanges();
                }
            }
            catch
            {
                isSucceed = false;
            }
            return(isSucceed);
        }
        private bool InitConfigurations(InitCulture culture, SiocCmsContext context, IDbContextTransaction transaction)
        {
            /* Init Configs */
            bool isSucceed = true;
            var  count     = context.SiocConfiguration.Count(); //ConfigurationViewModel.Repository.Count(_context: context, _transaction: transaction).Data;

            if (count == 0)
            {
                var config = new SiocConfiguration()
                {
                    Keyword        = SWCmsConstants.ConfigurationKeyword.Theme,
                    Specificulture = culture.Specificulture,
                    Category       = SWCmsConstants.ConfigurationType.User,
                    DataType       = (int)SWCmsConstants.DataType.String,
                    Description    = "Cms Theme",

                    Value = "Default"
                };
                context.Entry(config).State = EntityState.Added;

                var config1 = new SiocConfiguration()
                {
                    Keyword        = SWCmsConstants.ConfigurationKeyword.ThemeId,
                    Specificulture = culture.Specificulture,
                    Category       = SWCmsConstants.ConfigurationType.User,
                    DataType       = (int)SWCmsConstants.DataType.String,
                    Description    = "Cms Theme",

                    Value = "1"
                };
                context.Entry(config1).State = EntityState.Added;

                context.SaveChanges();
                GlobalConfigurationService.Instance.RefreshConfigurations(context, transaction);
            }


            return(isSucceed);
        }
Пример #8
0
        public static async Task <RepositoryResponse <bool> > InitCms(string siteName, InitCulture culture)
        {
            V_0.siteName             = siteName;
            V_0.culture              = culture;
            V_0.u003cu003et__builder = AsyncTaskMethodBuilder <RepositoryResponse <bool> > .Create();

            V_0.u003cu003e1__state = -1;
            V_0.u003cu003et__builder.Start <InitCmsService.u003cInitCmsu003ed__1>(ref V_0);
            return(V_0.u003cu003et__builder.get_Task());
        }
Пример #9
0
        public async Task <RepositoryResponse <bool> > InitCms(string siteName, InitCulture culture)
        {
            RepositoryResponse <bool> result         = new RepositoryResponse <bool>();
            MixCmsContext             context        = null;
            MixCmsAccountContext      accountContext = null;
            MixChatServiceContext     messengerContext;
            IDbContextTransaction     transaction    = null;
            IDbContextTransaction     accTransaction = null;
            bool isSucceed = true;

            try
            {
                if (!string.IsNullOrEmpty(MixService.GetConnectionString(MixConstants.CONST_CMS_CONNECTION)))
                {
                    context          = new MixCmsContext();
                    accountContext   = new MixCmsAccountContext();
                    messengerContext = new MixChatServiceContext();
                    //MixChatServiceContext._cnn = MixService.GetConnectionString(MixConstants.CONST_CMS_CONNECTION);
                    await context.Database.MigrateAsync();

                    await accountContext.Database.MigrateAsync();

                    await messengerContext.Database.MigrateAsync();

                    transaction = context.Database.BeginTransaction();

                    var countCulture = context.MixCulture.Count();

                    var isInit = countCulture > 0;

                    if (!isInit)
                    {
                        MixService.SetConfig <string>("SiteName", siteName);
                        isSucceed = InitCultures(culture, context, transaction);
                        isSucceed = isSucceed && InitPositions(context, transaction);
                        isSucceed = isSucceed && await InitConfigurationsAsync(siteName, culture, context, transaction);

                        isSucceed = isSucceed && await InitLanguagesAsync(culture, context, transaction);

                        isSucceed = isSucceed && InitThemes(siteName, context, transaction);
                    }
                    else
                    {
                        isSucceed = true;
                    }

                    if (isSucceed && context.MixPage.Count() == 0)
                    {
                        var cate = new MixPage()
                        {
                            Id              = 1,
                            Level           = 0,
                            Title           = "Home",
                            Specificulture  = culture.Specificulture,
                            Template        = "Pages/_Home.cshtml",
                            Type            = (int)MixPageType.Home,
                            CreatedBy       = "Admin",
                            CreatedDateTime = DateTime.UtcNow,
                            Status          = (int)PageStatus.Published
                        };


                        context.Entry(cate).State = EntityState.Added;
                        var alias = new MixUrlAlias()
                        {
                            Id              = 1,
                            SourceId        = "1",
                            Type            = (int)UrlAliasType.Page,
                            Specificulture  = culture.Specificulture,
                            CreatedDateTime = DateTime.UtcNow,
                            Alias           = cate.Title.ToLower()
                        };
                        context.Entry(alias).State = EntityState.Added;

                        var createVNHome = await context.SaveChangesAsync().ConfigureAwait(false);

                        isSucceed = createVNHome > 0;

                        var cate404 = new MixPage()
                        {
                            Id              = 2,
                            Title           = "404",
                            Level           = 0,
                            Specificulture  = culture.Specificulture,
                            Template        = "Pages/_404.cshtml",
                            Type            = (int)MixPageType.Article,
                            CreatedBy       = "Admin",
                            CreatedDateTime = DateTime.UtcNow,
                            Status          = (int)PageStatus.Published
                        };

                        var alias404 = new MixUrlAlias()
                        {
                            Id              = 2,
                            SourceId        = "2",
                            Type            = (int)UrlAliasType.Page,
                            Specificulture  = culture.Specificulture,
                            CreatedDateTime = DateTime.UtcNow,
                            Alias           = cate404.Title.ToLower()
                        };
                        context.Entry(cate404).State  = EntityState.Added;
                        context.Entry(alias404).State = EntityState.Added;

                        var create404 = await context.SaveChangesAsync().ConfigureAwait(false);

                        isSucceed = create404 > 0;
                    }

                    if (isSucceed)
                    {
                        transaction.Commit();
                    }
                    else
                    {
                        transaction.Rollback();
                    }
                }
                result.IsSucceed = isSucceed;
                return(result);
            }
            catch (Exception ex) // TODO: Add more specific exeption types instead of Exception only
            {
                transaction?.Rollback();
                accTransaction?.Rollback();
                result.IsSucceed = false;
                result.Exception = ex;
                return(result);
            }
            finally
            {
                context?.Dispose();
                accountContext?.Dispose();
            }
        }
Пример #10
0
        /// <summary>
        /// Step 1
        ///     - Init Culture
        ///     - Init System pages
        /// </summary>
        /// <param name="siteName"></param>
        /// <param name="culture"></param>
        /// <returns></returns>
        public static async Task <RepositoryResponse <bool> > InitCms(string siteName, InitCulture culture)
        {
            RepositoryResponse <bool> result         = new RepositoryResponse <bool>();
            MixCmsContext             context        = null;
            MixCmsAccountContext      accountContext = null;
            MixChatServiceContext     messengerContext;
            IDbContextTransaction     transaction    = null;
            IDbContextTransaction     accTransaction = null;
            bool isSucceed = true;

            try
            {
                if (!string.IsNullOrEmpty(MixService.GetConnectionString(MixConstants.CONST_CMS_CONNECTION)))
                {
                    context          = new MixCmsContext();
                    accountContext   = new MixCmsAccountContext();
                    messengerContext = new MixChatServiceContext();
                    await context.Database.MigrateAsync();

                    await accountContext.Database.MigrateAsync();

                    await messengerContext.Database.MigrateAsync();

                    transaction = context.Database.BeginTransaction();

                    var countCulture = context.MixCulture.Count();

                    var isInit = MixService.GetConfig <bool>("IsInit");

                    if (!isInit)
                    {
                        /**
                         * Init Selected Language as default
                         */
                        isSucceed = InitCultures(culture, context, transaction);

                        /**
                         * Init System Pages
                         */
                        if (isSucceed)
                        {
                            InitPages(culture.Specificulture, context, transaction);
                            isSucceed = (await context.SaveChangesAsync().ConfigureAwait(false)) > 0;
                        }
                        else
                        {
                            result.Errors.Add("Cannot init Pages");
                        }

                        /**
                         * Init System Positions
                         */
                        if (isSucceed)
                        {
                            isSucceed = await InitPositionsAsync(context, transaction);
                        }
                        else
                        {
                            result.Errors.Add("Cannot init Positions");
                        }

                        /**
                         * Init System Configurations
                         */
                        if (isSucceed)
                        {
                            var saveResult = await InitConfigurationsAsync(siteName, culture.Specificulture, context, transaction);

                            isSucceed = saveResult.IsSucceed;
                        }
                        else
                        {
                            result.Errors.Add("Cannot init Configurations");
                        }

                        /**
                         * Init System Attribute Sets
                         */
                        if (isSucceed)
                        {
                            var saveResult = await InitAttributeSetsAsync(siteName, culture.Specificulture, context, transaction);

                            isSucceed = saveResult.IsSucceed;
                        }
                        else
                        {
                            result.Errors.Add("Cannot init Attribute Sets");
                        }
                    }
                    if (isSucceed)
                    {
                        transaction.Commit();
                    }
                    else
                    {
                        transaction.Rollback();
                    }
                }
                result.IsSucceed = isSucceed;
                return(result);
            }
            catch (Exception ex) // TODO: Add more specific exeption types instead of Exception only
            {
                transaction?.Rollback();
                accTransaction?.Rollback();
                result.IsSucceed = false;
                result.Exception = ex;
                return(result);
            }
            finally
            {
                context?.Dispose();
                accountContext?.Dispose();
            }
        }
Пример #11
0
        public static async Task <RepositoryResponse <bool> > InitSiteData(string siteName, InitCulture culture)
        {
            RepositoryResponse <bool> result      = new RepositoryResponse <bool>();
            MixCmsContext             context     = null;
            IDbContextTransaction     transaction = null;
            bool isSucceed = true;

            try
            {
                if (!string.IsNullOrEmpty(MixService.GetConnectionString(MixConstants.CONST_CMS_CONNECTION)))
                {
                    context     = MixService.GetDbContext();
                    transaction = context.Database.BeginTransaction();

                    var countCulture = context.MixCulture.Count();


                    /**
                     * Init Selected Language as default
                     */
                    isSucceed = InitCultures(culture, context, transaction);

                    /**
                     * Init System Configurations
                     */
                    if (isSucceed && context.MixConfiguration.Count() == 0)
                    {
                        var saveResult = await InitConfigurationsAsync(siteName, culture.Specificulture, context, transaction);

                        result.IsSucceed = saveResult.IsSucceed;
                        result.Errors    = saveResult.Errors;
                        result.Exception = saveResult.Exception;
                    }
                    else
                    {
                        result.IsSucceed = false;
                        result.Errors.Add("Cannot init cultures");
                    }
                    if (result.IsSucceed)
                    {
                        transaction.Commit();
                    }
                    else
                    {
                        transaction.Rollback();
                    }
                }
                return(result);
            }
            catch (Exception ex) // TODO: Add more specific exeption types instead of Exception only
            {
                transaction?.Rollback();
                result.IsSucceed = false;
                result.Exception = ex;
                return(result);
            }
            finally
            {
                context?.Database.CloseConnection();
                context?.Dispose();
            }
        }
Пример #12
0
        /// <summary>
        /// Step 1
        ///     - Init Culture
        ///     - Init System pages
        /// </summary>
        /// <param name="siteName"></param>
        /// <param name="culture"></param>
        /// <returns></returns>
        public static async Task <RepositoryResponse <bool> > InitCms(string siteName, InitCulture culture)
        {
            RepositoryResponse <bool> result           = new RepositoryResponse <bool>();
            MixCmsContext             context          = null;
            MixCmsAccountContext      accountContext   = null;
            MixChatServiceContext     messengerContext = null;

            try
            {
                if (!string.IsNullOrEmpty(MixService.GetConnectionString(MixConstants.CONST_CMS_CONNECTION)))
                {
                    context          = MixService.GetDbContext();
                    accountContext   = new MixCmsAccountContext();
                    messengerContext = new MixChatServiceContext();
                    await context.Database.MigrateAsync();

                    await accountContext.Database.MigrateAsync();

                    await messengerContext.Database.MigrateAsync();

                    var countCulture     = context.MixCulture.Count();
                    var pendingMigration = context.Database.GetPendingMigrations().Count();
                    if (pendingMigration == 0)
                    {
                        return(await InitSiteData(siteName, culture));
                    }
                }
                return(result);
            }
            catch (Exception ex) // TODO: Add more specific exeption types instead of Exception only
            {
                result.IsSucceed = false;
                result.Exception = ex;
                return(result);
            }
            finally
            {
                context?.Dispose();
                accountContext?.Dispose();
                messengerContext?.Dispose();
            }
        }
        public async Task <RepositoryResponse <bool> > InitSWCms(InitCulture culture)
        {
            RepositoryResponse <bool> result         = new RepositoryResponse <bool>();
            SiocCmsContext            context        = null;
            SiocCmsAccountContext     accountContext = null;
            IDbContextTransaction     transaction    = null;
            IDbContextTransaction     accTransaction = null;
            bool isSucceed = true;

            try
            {
                if (!string.IsNullOrEmpty(CmsConfigurations.CmsConnectionString))
                {
                    context        = new SiocCmsContext();
                    accountContext = new SiocCmsAccountContext();
                    await context.Database.MigrateAsync();

                    await accountContext.Database.MigrateAsync();

                    transaction = context.Database.BeginTransaction();

                    var countCulture = context.SiocCulture.Count();

                    var isInit = countCulture > 0;

                    if (!isInit)
                    {
                        isSucceed = InitCultures(culture, context, transaction);

                        isSucceed = isSucceed && InitPositions(context, transaction);

                        isSucceed = isSucceed && InitThemes(context, transaction);

                        isSucceed = isSucceed && InitConfigurations(culture, context, transaction);
                    }
                    else
                    {
                        isSucceed = true;
                    }

                    if (isSucceed && BECategoryViewModel.Repository.Count(context, transaction).Data == 0)
                    {
                        BECategoryViewModel cate = new BECategoryViewModel(new SiocCategory()
                        {
                            Title          = "Home",
                            Specificulture = culture.Specificulture,
                            Template       = "_Home",
                            Type           = (int)SWCmsConstants.CateType.Home,
                            CreatedBy      = "Admin"
                        }, context, transaction);

                        var createVNHome = await cate.SaveModelAsync(false, context, transaction).ConfigureAwait(false);

                        isSucceed = createVNHome.IsSucceed;

                        //BECategoryViewModel uscate = new BECategoryViewModel(new SiocCategory()
                        //{
                        //    Id = cate.Model.Id,
                        //    Title = "Home",
                        //    Specificulture = "en-us",
                        //    Template = "_Home",
                        //    Type = (int)SWCmsConstants.CateType.Home,
                        //    CreatedBy = "Admin",
                        //    CreatedDateTime = DateTime.UtcNow,
                        //}, context, transaction);

                        //var createUSHome = await uscate.SaveModelAsync(false, context, transaction).ConfigureAwait(false);
                        //isSucceed = createUSHome.IsSucceed;
                    }

                    if (isSucceed)
                    {
                        transaction.Commit();
                    }
                    else
                    {
                        transaction.Rollback();
                    }
                }
                result.IsSucceed = isSucceed;
                return(result);
            }
            catch (Exception ex) // TODO: Add more specific exeption types instead of Exception only
            {
                transaction?.Rollback();
                accTransaction?.Rollback();
                result.IsSucceed = false;
                result.Exception = ex;
                return(result);
            }
            finally
            {
                context?.Dispose();
                accountContext?.Dispose();
            }
        }
        public async Task <RepositoryResponse <bool> > InitSWCms(InitCulture culture)
        {
            RepositoryResponse <bool> result         = new RepositoryResponse <bool>();
            SiocCmsContext            context        = null;
            SiocCmsAccountContext     accountContext = null;
            IDbContextTransaction     transaction    = null;
            IDbContextTransaction     accTransaction = null;
            bool isSucceed = true;

            try
            {
                if (!string.IsNullOrEmpty(CmsConfigurations.CmsConnectionString))
                {
                    context        = new SiocCmsContext();
                    accountContext = new SiocCmsAccountContext();
                    await context.Database.MigrateAsync();

                    await accountContext.Database.MigrateAsync();

                    transaction = context.Database.BeginTransaction();

                    var countCulture = context.SiocCulture.Count();

                    var isInit = countCulture > 0;

                    if (!isInit)
                    {
                        isSucceed = InitCultures(culture, context, transaction);

                        isSucceed = isSucceed && InitPositions(context, transaction);

                        isSucceed = isSucceed && InitThemes(context, transaction);

                        isSucceed = isSucceed && InitConfigurations(culture, context, transaction);
                    }
                    else
                    {
                        isSucceed = true;
                    }

                    if (isSucceed && BECategoryViewModel.Repository.Count(context, transaction).Data == 0)
                    {
                        var cate = new SiocCategory()
                        {
                            Id              = 1,
                            Level           = 0,
                            Title           = "Home",
                            Specificulture  = culture.Specificulture,
                            Template        = "Pages/_Home.cshtml",
                            Type            = (int)SWCmsConstants.CateType.Home,
                            CreatedBy       = "Admin",
                            CreatedDateTime = DateTime.UtcNow,
                            Status          = (int)SWStatus.Published
                        };


                        context.Entry(cate).State = EntityState.Added;
                        var alias = new SiocUrlAlias()
                        {
                            Id              = 1,
                            SourceId        = "1",
                            Type            = (int)SWCmsConstants.UrlAliasType.Page,
                            Specificulture  = culture.Specificulture,
                            CreatedDateTime = DateTime.UtcNow,
                            Alias           = cate.Title.ToLower()
                        };
                        context.Entry(alias).State = EntityState.Added;

                        var createVNHome = await context.SaveChangesAsync().ConfigureAwait(false);

                        isSucceed = createVNHome > 0;

                        var cate404 = new SiocCategory()
                        {
                            Id              = 2,
                            Title           = "404",
                            Level           = 0,
                            Specificulture  = culture.Specificulture,
                            Template        = "Pages/_404.cshtml",
                            Type            = (int)SWCmsConstants.CateType.Article,
                            CreatedBy       = "Admin",
                            CreatedDateTime = DateTime.UtcNow,
                            Status          = (int)SWStatus.Published
                        };

                        var alias404 = new SiocUrlAlias()
                        {
                            Id              = 2,
                            SourceId        = "2",
                            Type            = (int)SWCmsConstants.UrlAliasType.Page,
                            Specificulture  = culture.Specificulture,
                            CreatedDateTime = DateTime.UtcNow,
                            Alias           = cate404.Title.ToLower()
                        };
                        context.Entry(cate404).State  = EntityState.Added;
                        context.Entry(alias404).State = EntityState.Added;

                        var create404 = await context.SaveChangesAsync().ConfigureAwait(false);

                        isSucceed = create404 > 0;
                    }

                    if (isSucceed)
                    {
                        transaction.Commit();
                    }
                    else
                    {
                        transaction.Rollback();
                    }
                }
                result.IsSucceed = isSucceed;
                return(result);
            }
            catch (Exception ex) // TODO: Add more specific exeption types instead of Exception only
            {
                transaction?.Rollback();
                accTransaction?.Rollback();
                result.IsSucceed = false;
                result.Exception = ex;
                return(result);
            }
            finally
            {
                context?.Dispose();
                accountContext?.Dispose();
            }
        }
Пример #15
0
        public async Task <RepositoryResponse <bool> > InitCms(string siteName, InitCulture culture)
        {
            RepositoryResponse <bool> result         = new RepositoryResponse <bool>();
            MixCmsContext             context        = null;
            MixCmsAccountContext      accountContext = null;
            MixChatServiceContext     messengerContext;
            IDbContextTransaction     transaction    = null;
            IDbContextTransaction     accTransaction = null;
            bool isSucceed = true;

            try
            {
                if (!string.IsNullOrEmpty(MixService.GetConnectionString(MixConstants.CONST_CMS_CONNECTION)))
                {
                    context          = new MixCmsContext();
                    accountContext   = new MixCmsAccountContext();
                    messengerContext = new MixChatServiceContext();
                    //MixChatServiceContext._cnn = MixService.GetConnectionString(MixConstants.CONST_CMS_CONNECTION);
                    await context.Database.MigrateAsync();

                    await accountContext.Database.MigrateAsync();

                    await messengerContext.Database.MigrateAsync();

                    transaction = context.Database.BeginTransaction();

                    var countCulture = context.MixCulture.Count();

                    var isInit = countCulture > 0;

                    if (!isInit)
                    {
                        MixService.SetConfig <string>("SiteName", siteName);
                        isSucceed = InitCultures(culture, context, transaction);
                        if (isSucceed)
                        {
                            isSucceed = isSucceed && InitPositions(context, transaction);
                        }
                        else
                        {
                            result.Errors.Add("Cannot init Cultures");
                        }
                        if (isSucceed)
                        {
                            isSucceed = isSucceed && await InitConfigurationsAsync(siteName, culture, context, transaction);
                        }
                        else
                        {
                            result.Errors.Add("Cannot init Positions");
                        }
                        if (isSucceed)
                        {
                            isSucceed = isSucceed && await InitLanguagesAsync(culture, context, transaction);
                        }
                        else
                        {
                            result.Errors.Add("Cannot init Configurations");
                        }
                        if (isSucceed)
                        {
                            var initTheme = await InitThemesAsync(siteName, context, transaction);

                            isSucceed = isSucceed && initTheme.IsSucceed;
                            result.Errors.AddRange(initTheme.Errors);
                            result.Exception = initTheme.Exception;
                        }
                        else
                        {
                            result.Errors.Add("Cannot init Languages");
                        }
                    }
                    else
                    {
                        isSucceed = true;
                    }

                    if (isSucceed && context.MixPage.Count() == 0)
                    {
                        InitPages(culture.Specificulture, context, transaction);
                        isSucceed = (await context.SaveChangesAsync().ConfigureAwait(false)) > 0;
                    }
                    else
                    {
                        result.Errors.Add("Cannot init Themes");
                    }
                    if (isSucceed)
                    {
                        transaction.Commit();
                    }
                    else
                    {
                        transaction.Rollback();
                    }
                }
                result.IsSucceed = isSucceed;
                return(result);
            }
            catch (Exception ex) // TODO: Add more specific exeption types instead of Exception only
            {
                transaction?.Rollback();
                accTransaction?.Rollback();
                result.IsSucceed = false;
                result.Exception = ex;
                return(result);
            }
            finally
            {
                context?.Dispose();
                accountContext?.Dispose();
            }
        }