private void SetDataToDb(DbRecordChangesTask dbTask)
 {
     if (!dbUpdateWorker.IsBusy)
     {
         dbUpdateWorker.RunWorkerAsync(dbTask);
     }
     else
     {
         updateDbTasksQueue.Enqueue(dbTask);
     }
 }
Example #2
0
        // Обновляем данные в БД в фоновом режиме
        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);
        }
Example #3
0
 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);
        }