private void rewriteThreatsDBToolStripMenuItem_Click(object sender, EventArgs e) { // Перезаписать базу угроз if (MessageBox.Show("Будут удалены все угрозы из таблицы в БД и записаны заново.\nПродолжить?", "Ахтунг!", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) { using (KPSZIContext db = new KPSZIContext()) { FileInfo fi = new FileInfo("thrlist.xlsx"); //try //{ //// Каскадное удаление данных вместе с внешними ключами //db.Database.ExecuteSqlCommand("SET SCHEMA '" + KPSZIContext.schema_name + "'; TRUNCATE \"Threats\" CASCADE;"); db.Threats.AddRange(Threat.GetThreatsFromXlsx(fi, db)); db.SaveChanges(); db.SeedForThreat(); db.SaveChanges(); //} //catch (Exception ex) //{ // MessageBox.Show("В rewriteThreatsDBToolStripMenuItem_Click Exception!\n" + ex.Message, "Ахтунг!", MessageBoxButtons.OK, MessageBoxIcon.Error); // return; //} } MessageBox.Show("Таблица угроз успешно перезаписана!", "Это успех, парень!", MessageBoxButtons.OK, MessageBoxIcon.Information); } }
private void refreshThreatDBToolStripMenuItem_Click(object sender, EventArgs e) { // Обновить список угроз if (MessageBox.Show("Будет проведено сравнение локальной базы угроз с данными из файла \"thrlist.xlsx\" и автоматическое обновление данных.\nПродолжить?", "Ахтунг!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { using (KPSZIContext db = new KPSZIContext()) { try { FileInfo fi = new FileInfo("thrlist.xlsx"); List <Threat> listThreatsFromFile = Threat.GetThreatsFromXlsx(fi, db); List <Threat> listThreatsFromDB = db.Threats.OrderBy(t => t.ThreatNumber).ToList(); DateTime lastUpdateOfLocalDB; if (listThreatsFromDB != null) { // Получение даты последнего обновления угроз из БД lastUpdateOfLocalDB = listThreatsFromDB.Select(t => t.DateOfChange).Max(); } else { lastUpdateOfLocalDB = DateTime.MinValue; } // Получение даты последнего обновления угроз из актуального файла с угрозами DateTime lastUpdateOfFile = listThreatsFromFile.Select(t => t.DateOfChange).Max(); // Если нет изменений, то прекратить обновление if (lastUpdateOfLocalDB == lastUpdateOfFile) { MessageBox.Show("База угроз не требует обновления!", "КПСЗИ", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } // Отбор угроз, претерпевших изменения List <Threat> listChangedOrAddedThreats = listThreatsFromFile.Where(t => t.DateOfChange > lastUpdateOfLocalDB).ToList(); // Внесение изменений foreach (Threat thr in listChangedOrAddedThreats) { Threat ThrFromDB = listThreatsFromDB.Where(t => t.ThreatNumber == thr.ThreatNumber).FirstOrDefault(); if (ThrFromDB == null) { //listThreatsFromDB.Add(thr); db.Threats.Add(thr); continue; } ThrFromDB.AvailabilityViolation = thr.AvailabilityViolation; ThrFromDB.ConfidenceViolation = thr.ConfidenceViolation; ThrFromDB.DateOfAdd = thr.DateOfAdd; ThrFromDB.DateOfChange = thr.DateOfChange; ThrFromDB.Description = thr.Description; ThrFromDB.IntegrityViolation = thr.IntegrityViolation; ThrFromDB.Name = thr.Name; ThrFromDB.ObjectOfInfluence = thr.Name; ThrFromDB.ThreatNumber = thr.ThreatNumber; ThrFromDB.ThreatSources = thr.ThreatSources; } db.SaveChanges(); } catch (Exception ex) { MessageBox.Show("В refreshThreatDBToolStripMenuItem_Click Exception!\n" + ex.Message, "Ахтунг!", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } MessageBox.Show("Список угроз обновлен", "Это успех, парень!", MessageBoxButtons.OK, MessageBoxIcon.Information); } }