private void SetDataToDb(DbRecordChangesTask dbTask) { if (!dbUpdateWorker.IsBusy) { dbUpdateWorker.RunWorkerAsync(dbTask); } else { updateDbTasksQueue.Enqueue(dbTask); } }
// Обновляем данные в БД в фоновом режиме private void backgroundDbUpdateWorker_DoWork(object sender, DoWorkEventArgs e) { DbRecordChangesTask updateDbTask = e.Argument as DbRecordChangesTask; try { using (MedicamentRemainsContext mc = new MedicamentRemainsContext()) { MedicamentRemain record = updateDbTask.DbRecord as MedicamentRemain; record.UpdateDate = DateTime.Now; switch (updateDbTask.ChangesType) { case DbRecordChangesType.Create: backgroundDbUpdateWorker.ReportProgress(0, "Створення запису по медикаменту " + record.Medicament + " ..."); mc.Medicaments.Attach(record.Medicament); mc.MedicamentRemains.Add(record); mc.SaveChanges(); backgroundDbUpdateWorker.ReportProgress(0, "Запис успішно доданий до бази данних!"); break; case DbRecordChangesType.Update: backgroundDbUpdateWorker.ReportProgress(0, "Оновлення запису по медикаменту " + record.Medicament + " ..."); mc.Medicaments.Attach(record.Medicament); mc.Entry <MedicamentRemain>(record).State = System.Data.Entity.EntityState.Modified; mc.SaveChanges(); backgroundDbUpdateWorker.ReportProgress(0, "Запис успішно оновлений у базі данних!"); break; case DbRecordChangesType.Remove: backgroundDbUpdateWorker.ReportProgress(0, "Видалення запису по медикаменту " + record.Medicament + " ..."); MedicamentRemain item = mc.MedicamentRemains.Where(p => (p.Id == record.Id)).First(); mc.MedicamentRemains.Remove(item); mc.SaveChanges(); backgroundDbUpdateWorker.ReportProgress(0, "Запис успішно видалений з бази данних!"); break; } } } catch (Exception ex) { backgroundDbUpdateWorker.ReportProgress(0, "Помилка: " + ex.Message); } // Задержка, чтобы пользователь смог прочитать сообщение об успехе операции либо об ошибке System.Threading.Thread.Sleep(3000); }
private void SendUpdateDbTask(DbRecordChangesTask task) { lock (locker) { if (!backgroundDbUpdateWorker.IsBusy) { backgroundDbUpdateWorker.RunWorkerAsync(task); } else { dbUpdatesQueue.Enqueue(task); } } }
private void dbUpdateWorker_DoWork(object sender, DoWorkEventArgs e) { DbRecordChangesTask dbChangesTask = e.Argument as DbRecordChangesTask; try { using (MedicamentRemainsContext mc = new MedicamentRemainsContext()) { if (tableItem is Meter) { Meter record = dbChangesTask.DbRecord as Meter; switch (dbChangesTask.ChangesType) { case DbRecordChangesType.Create: dbUpdateWorker.ReportProgress(0, "Створення нової одиниці виміру..."); record.Name = record.Name.Trim(); mc.Meters.Add(record); break; case DbRecordChangesType.Update: dbUpdateWorker.ReportProgress(0, "Змінення одиниці виміру..."); record.Name = record.Name.Trim(); mc.Meters.Attach(record); mc.Entry <Meter>(record).State = System.Data.Entity.EntityState.Modified; break; case DbRecordChangesType.Remove: dbUpdateWorker.ReportProgress(0, "Видалення одиниці виміру..."); mc.Meters.Attach(record); mc.Meters.Remove(record); break; } } else if (tableItem is HospitalDepartment) { HospitalDepartment record = dbChangesTask.DbRecord as HospitalDepartment; switch (dbChangesTask.ChangesType) { case DbRecordChangesType.Create: dbUpdateWorker.ReportProgress(0, "Створення нового відділення..."); record.Name = record.Name.Trim(); mc.HospitalDepartments.Add(record); break; case DbRecordChangesType.Update: dbUpdateWorker.ReportProgress(0, "Змінення даних про відділення..."); record.Name = record.Name.Trim(); mc.HospitalDepartments.Attach(record); mc.Entry <HospitalDepartment>(record).State = System.Data.Entity.EntityState.Modified; break; case DbRecordChangesType.Remove: dbUpdateWorker.ReportProgress(0, "Видалення даних про відділення..."); mc.HospitalDepartments.Attach(record); mc.HospitalDepartments.Remove(record); break; } } else if (tableItem is MedicamentGroup) { MedicamentGroup record = dbChangesTask.DbRecord as MedicamentGroup; switch (dbChangesTask.ChangesType) { case DbRecordChangesType.Create: dbUpdateWorker.ReportProgress(0, "Створення нової группи медикаментів..."); record.Name = record.Name.Trim(); mc.MedicamentsGroups.Add(record); break; case DbRecordChangesType.Update: dbUpdateWorker.ReportProgress(0, "Змінення группи медикаментів..."); record.Name = record.Name.Trim(); mc.MedicamentsGroups.Attach(record); mc.Entry <MedicamentGroup>(record).State = System.Data.Entity.EntityState.Modified; break; case DbRecordChangesType.Remove: dbUpdateWorker.ReportProgress(0, "Видалення группи медикаментів..."); mc.MedicamentsGroups.Attach(record); mc.MedicamentsGroups.Remove(record); break; } } mc.SaveChanges(); if (tableItem is HospitalDepartment) { isDepartmentListUpdated = true; } dbUpdateWorker.ReportProgress(0, "Дані успішно збережені!"); } } catch (Exception ex) { dbUpdateWorker.ReportProgress(0, "Помилка: " + ex.Message); } Thread.Sleep(3000); }