Dictionary RefreshDictionary(DictionaryInfo dictInfo, User user, Stream stream) { using (var db = new DictServiceEntities()) { var dict = db.Dictionaries.Single(x => x.Dictionary_id == dictInfo.Dictionary_id.Value); dict.DictionaryState = db.DictionaryStates.Single(x => x.State_id == (int)DictionaryStateEnum.Refreshing); db.Entry(dict).State = EntityState.Modified; var change = new UserChangeHistory() { Dictionary_id = dict.Dictionary_id, Action_id = (int)ActionEnum.EditDict, DateHistory = DateTime.Now, User_id = user.User_id }; db.UserChangeHistories.Add(change); db.SaveChanges(); ExistDictFileProcessing(stream, dict, change); dict.DictionaryState = db.DictionaryStates.Single(x => x.State_id == (int)DictionaryStateEnum.Available); db.Entry(dict).State = EntityState.Modified; db.SaveChanges(); AddNewQueue(dict.Dictionary_id, ActionEnum.EditDict, change.UserHistory_id); return(dict); } }
private void AddNewDicionary(DictionaryInfo dictInfo, User user, Stream stream) { string uploadPath = GetUploadPath(dictInfo.Category_id, dictInfo.FriendlyName, dictInfo.FileName); // FileHelper.LoadFileFromStream(stream, uploadPath); var id = NewDictFileProcessing(stream, uploadPath, dictInfo); using (var db = new DictServiceEntities()) { var change = new UserChangeHistory() { User_id = user.User_id, Dictionary_id = id, Action_id = (int)dictInfo.Action, DateHistory = DateTime.Now }; db.UserChangeHistories.Add(change); db.SaveChanges(); } }
void ExistDictFileProcessing(Stream stream, Dictionary dict, UserChangeHistory change) { var tmpFolder = FileHelper.GetTemporaryDirectory(); var tmpFile = Path.Combine(tmpFolder, Path.GetFileName(dict.FileName)); FileHelper.LoadFileFromStream(stream, tmpFile); ZipHelper.UnZip(tmpFile); var newFile = Directory.GetFiles(tmpFolder, "*.mdb").Single(); if (AccessHelper.CheckIdentifyInfo(newFile) == dict.Dictionary_id) { var unZipFoler = ZipHelper.UnZipToTempDir(dict.PathToDict); var oldDict = Directory.GetFiles(unZipFoler, "*.mdb").Single(); var changes = DBComparer.CompareDataBase(newFile, oldDict); if (changes.Any()) { using (var db = new DictServiceEntities()) { db.DictionaryChangeHistories.AddRange(changes.Select(x => new DictionaryChangeHistory() { UserHistory_id = change.UserHistory_id, Change_id = (int)x.ChangeType, Dictionary_id = dict.Dictionary_id, TableName = x.TableName, PrimaryKey = x.PrimaryKey, ColumnName = x.ColumnName, OldValue = x.OldValue, NewValue = x.NewValue })); db.SaveChanges(); } CreateDictionaryVersion(dict); File.Move(tmpFile, dict.PathToDict); } } else { throw new Exception("Попытка загрузить неизвестный словарь"); } }