public async Task <RepositoryResponse <bool> > InitCms(InitCulture culture) { RepositoryResponse <bool> result = new RepositoryResponse <bool>(); SioCmsContext context = null; SioCmsAccountContext accountContext = null; IDbContextTransaction transaction = null; IDbContextTransaction accTransaction = null; bool isSucceed = true; try { if (!string.IsNullOrEmpty(SioService.GetConnectionString(SioConstants.CONST_CMS_CONNECTION))) { context = new SioCmsContext(); accountContext = new SioCmsAccountContext(); await context.Database.MigrateAsync(); await accountContext.Database.MigrateAsync(); transaction = context.Database.BeginTransaction(); var countCulture = context.SioCulture.Count(); var isInit = countCulture > 0; if (!isInit) { isSucceed = InitCultures(culture, context, transaction); isSucceed = isSucceed && InitPositions(context, transaction); isSucceed = isSucceed && InitThemes(context, transaction); isSucceed = isSucceed && await InitConfigurationsAsync(culture, context, transaction); isSucceed = isSucceed && await InitLanguagesAsync(culture, context, transaction); } else { isSucceed = true; } if (isSucceed && context.SioPage.Count() == 0) { var cate = new SioPage() { Id = 1, Level = 0, Title = "Home", Specificulture = culture.Specificulture, Template = "Pages/_Home.cshtml", Type = (int)SioPageType.Home, CreatedBy = "Admin", CreatedDateTime = DateTime.UtcNow, Status = (int)PageStatus.Published }; context.Entry(cate).State = EntityState.Added; var alias = new SioUrlAlias() { 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 SioPage() { Id = 2, Title = "404", Level = 0, Specificulture = culture.Specificulture, Template = "Pages/_404.cshtml", Type = (int)SioPageType.Article, CreatedBy = "Admin", CreatedDateTime = DateTime.UtcNow, Status = (int)PageStatus.Published }; var alias404 = new SioUrlAlias() { 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(); } }
public async Task <RepositoryResponse <bool> > InitCms(string siteName, InitCulture culture) { RepositoryResponse <bool> result = new RepositoryResponse <bool>(); SioCmsContext context = null; SioCmsAccountContext accountContext = null; SioChatServiceContext messengerContext; IDbContextTransaction transaction = null; IDbContextTransaction accTransaction = null; bool isSucceed = true; try { if (!string.IsNullOrEmpty(SioService.GetConnectionString(SioConstants.CONST_CMS_CONNECTION))) { context = new SioCmsContext(); accountContext = new SioCmsAccountContext(); messengerContext = new SioChatServiceContext(); //SioChatServiceContext._cnn = SioService.GetConnectionString(SioConstants.CONST_CMS_CONNECTION); await context.Database.MigrateAsync(); await accountContext.Database.MigrateAsync(); await messengerContext.Database.MigrateAsync(); transaction = context.Database.BeginTransaction(); var countCulture = context.SioCulture.Count(); var isInit = countCulture > 0; if (!isInit) { SioService.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.SioPage.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(); } }