private void Initialize() { var threadId = System.Threading.Thread.CurrentThread.ManagedThreadId; var isBackground = System.Threading.Thread.CurrentThread.IsBackground; var isPool = System.Threading.Thread.CurrentThread.IsThreadPoolThread; using (LearnLanguagesContext context = new LearnLanguagesContext()) { bool databaseExists = context.DatabaseExists(); bool deleteAll = bool.Parse(EfResources.DeleteAllExistingDataAndStartNewSeedData); //if (context.DatabaseExists() && bool.Parse(EfResources.DeleteAllExistingDataAndStartNewSeedData)) if (databaseExists && deleteAll) context.DeleteDatabase(); if (!context.DatabaseExists()) { context.CreateDatabase(); context.Connection.Open(); SeedContext(context); context.SaveChanges(); } } }
private void SeedContext(LearnLanguagesContext context) { //ROLES foreach (var roleDto in SeedData.Ton.Roles) { var roleData = EfHelper.ToData(roleDto); context.RoleDatas.AddObject(roleData); context.SaveChanges(); //UPDATE SEED DATA THAT REFERENCES THE ID OF THIS DATA var affectedUsers = (from userDto in SeedData.Ton.Users where userDto.RoleIds.Contains(roleDto.Id) select userDto).ToList(); foreach (var affectedUser in affectedUsers) { affectedUser.RoleIds.Remove(roleDto.Id); affectedUser.RoleIds.Add(roleData.Id); } roleDto.Id = roleData.Id; } //USERS foreach (var userDto in SeedData.Ton.Users) { //var userData = EfHelper.ToData(userDto, false); var userData = context.UserDatas.CreateObject(); userData.Id = userDto.Id; userData.Username = userDto.Username; userData.Salt = userDto.Salt; userData.SaltedHashedPasswordValue = userDto.SaltedHashedPasswordValue; //manually add roles (cannot use dal.getroles because we are seeding //the data and initializing the context that would use) foreach (var roleId in userDto.RoleIds) { var userRoleData = (from roleData in context.RoleDatas where roleData.Id == roleId select roleData).First(); if (userRoleData == null) throw new Exceptions.SeedDataException(); userData.RoleDatas.Add(userRoleData); } context.UserDatas.AddObject(userData); context.SaveChanges(); #region UPDATE AFFECTED SEED DATA THAT REFERENCES THE ID OF THIS USER var affectedLanguages = (from languageDto in SeedData.Ton.Languages where languageDto.UserId == userDto.Id select languageDto); foreach (var affectedLanguage in affectedLanguages) { affectedLanguage.UserId = userData.Id; } var affectedPhrases = (from phraseDto in SeedData.Ton.Phrases where phraseDto.UserId == userDto.Id select phraseDto); foreach (var affectedPhrase in affectedPhrases) { affectedPhrase.UserId = userData.Id; } var affectedTranslations = (from translationDto in SeedData.Ton.Translations where translationDto.UserId == userDto.Id select translationDto); foreach (var affectedTranslation in affectedTranslations) { affectedTranslation.UserId = userData.Id; } var affectedLines = (from lineDto in SeedData.Ton.Lines where lineDto.UserId == userDto.Id select lineDto); foreach (var affectedLine in affectedLines) { affectedLine.UserId = userData.Id; } var affectedMultiLineTexts = (from multiLineTextDto in SeedData.Ton.MultiLineTexts where multiLineTextDto.UserId == userDto.Id select multiLineTextDto); foreach (var affectedMultiLineText in affectedMultiLineTexts) { affectedMultiLineText.UserId = userData.Id; } var affectedPhraseBeliefs = (from phraseBeliefDto in SeedData.Ton.PhraseBeliefs where phraseBeliefDto.UserId == userDto.Id select phraseBeliefDto); foreach (var affectedPhraseBelief in affectedPhraseBeliefs) { affectedPhraseBelief.UserId = userData.Id; } userDto.Id = userData.Id; #endregion } //LANGUAGES foreach (var langDto in SeedData.Ton.Languages) { var langData = EfHelper.ToData(langDto, context); context.LanguageDatas.AddObject(langData); context.SaveChanges(); //UPDATE SEED DATA PHRASES WITH NEW LANGUAGE ID var affectedPhrases = (from phraseDto in SeedData.Ton.Phrases where phraseDto.LanguageId == langDto.Id select phraseDto).ToList(); foreach (var phraseDto in affectedPhrases) { phraseDto.LanguageId = langData.Id;//new Id } langDto.Id = langData.Id; } //PHRASES foreach (var phraseDto in SeedData.Ton.Phrases) { var phraseData = EfHelper.AddToContext(phraseDto, context); //var phraseData = EfHelper.ToData(phraseDto); //context.PhraseDatas.AddObject(phraseData); context.SaveChanges(); //UPDATE SEED DATA THAT REFERENCES THE ID OF THIS DATA var affectedUsers = (from userDto in SeedData.Ton.Users where userDto.PhraseIds.Contains(phraseDto.Id) select userDto);//.ToList(); foreach (var affectedUser in affectedUsers) { affectedUser.PhraseIds.Remove(phraseDto.Id); affectedUser.PhraseIds.Add(phraseData.Id); } var affectedTranslations = (from translationDto in SeedData.Ton.Translations where translationDto.PhraseIds.Contains(phraseDto.Id) select translationDto); foreach (var affectedTranslation in affectedTranslations) { affectedTranslation.PhraseIds.Remove(phraseDto.Id); affectedTranslation.PhraseIds.Add(phraseData.Id); } var affectedLines = (from lineDto in SeedData.Ton.Lines where lineDto.PhraseId == phraseDto.Id select lineDto); foreach (var affectedLine in affectedLines) { affectedLine.PhraseId = phraseData.Id; } phraseDto.Id = phraseData.Id; } //TRANSLATIONS foreach (var translationDto in SeedData.Ton.Translations) { var translationData = EfHelper.AddToContext(translationDto, context); context.SaveChanges(); //UPDATE USERS var affectedUsers = (from userDto in SeedData.Ton.Users where userDto.TranslationIds.Contains(translationDto.Id) select userDto).ToList(); foreach (var affectedUser in affectedUsers) { affectedUser.PhraseIds.Remove(translationDto.Id); affectedUser.PhraseIds.Add(translationData.Id); } translationDto.Id = translationData.Id; } //LINES foreach (var lineDto in SeedData.Ton.Lines) { var lineData = EfHelper.AddToContext(lineDto, context); context.SaveChanges(); //UPDATE USERS var affectedUsers = (from userDto in SeedData.Ton.Users where userDto.LineIds.Contains(lineDto.Id) select userDto).ToList(); foreach (var affectedUser in affectedUsers) { affectedUser.LineIds.Remove(lineDto.Id); affectedUser.LineIds.Add(lineDto.Id); } lineDto.Id = lineData.Id; } //STUDY DATAS foreach (var studyDataDto in SeedData.Ton.StudyDatas) { var studyDataData = EfHelper.AddToContext(studyDataDto, context); context.SaveChanges(); ////UPDATE USERS //var affectedUsers = (from userDto in SeedData.Ton.Users // where userDto.TranslationIds.Contains(studyDataDto.Id) // select userDto).ToList(); //foreach (var affectedUser in affectedUsers) //{ // affectedUser.PhraseIds.Remove(studyDataDto.Id); // affectedUser.PhraseIds.Add(studyDataDto.Id); //} studyDataDto.Id = studyDataData.Id; } }