Ejemplo n.º 1
0
        /// <summary>
        /// Save cache into db. And call maintain if maintain period completed.
        /// </summary>
        /// <param name="cache"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        private async Task SaveAsync(Queue <Alarm> cache, CancellationToken cancellationToken)
        {
            if ((cache?.Count ?? 0) == 0)
            {
                return;
            }

            var context = new AlarmContext(FileName);

            /* // Код как оно должно работать
             * context.Alarms.AddRange(cache);
             * await context.SaveChangesAsync(cancellationToken).ConfigureAwait(false);
             */

            // ########## Начало костыля
            // TODO: при новых версиях EF Core (> 3.0.1) пробовать убрать этот костыль
            const int maxItemsInInsert = 128;
Ejemplo n.º 2
0
 void InitDB()
 {
     Database.SetInitializer(new DropCreateDatabaseIfModelChanges <AlarmContext>());
     Database.DefaultConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0");
     dbcontext = new AlarmContext();
     if (dbcontext.EventTypes.Count() == 0)
     {
         dbcontext.EventTypes.Add(new EventType {
             EventName = EventType.EventType_Enabled
         });
         dbcontext.EventTypes.Add(new EventType {
             EventName = EventType.EventType_Disabled
         });
         dbcontext.EventTypes.Add(new EventType {
             EventName = EventType.EventType_Detection
         });
         dbcontext.SaveChanges();
     }
 }
Ejemplo n.º 3
0
 public DbAlarmRepository(AlarmContext context)
 {
     this.context = context;
 }
Ejemplo n.º 4
0
 public EventsController(AlarmContext context)
 {
     this.context = context;
 }
Ejemplo n.º 5
0
        /// <summary>
        /// db initialization
        /// </summary>
        private async Task InnitDB(CancellationToken cancellationToken)
        {
            var context = new AlarmContext(FileName);

            var storedCategories = await context.AlarmCategories.ToListAsync(cancellationToken).ConfigureAwait(false);

            var storedInfos = await context.AlarmsInfo.ToListAsync(cancellationToken).ConfigureAwait(false);

            foreach (var cfg in Configs)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    break;
                }

                //синхронизируем категорию в 2 хранилища
                var storedCategory = storedCategories.FirstOrDefault(e =>
                                                                     e.Name == cfg.AlarmInfo.Category.Name &&
                                                                     e.Style == cfg.AlarmInfo.Category.Style
                                                                     );

                if (storedCategory == default)
                {
                    storedCategory = new AlarmCategory
                    {
                        Name  = cfg.AlarmInfo.Category.Name,
                        Style = cfg.AlarmInfo.Category.Style,
                    };
                    context.AlarmCategories.Add(storedCategory);
                    storedCategories.Add(storedCategory);
                }

                cfg.AlarmInfo.Category = storedCategory;

                if (!localCategories.Contains(storedCategory))
                {
                    localCategories.Add(storedCategory);
                }

                //синхронизируем алармИнфо
                var storedAlarmInfo = storedInfos.FirstOrDefault(e =>
                                                                 e.Category == cfg.AlarmInfo.Category &&
                                                                 e.FacilityAccessName == cfg.AlarmInfo.FacilityAccessName &&
                                                                 e.DeviceName == cfg.AlarmInfo.DeviceName &&
                                                                 e.Name == cfg.AlarmInfo.Name &&
                                                                 e.Description == cfg.AlarmInfo.Description &&
                                                                 e.Condition == cfg.AlarmInfo.Condition &&
                                                                 e.TemplateTxt == cfg.AlarmInfo.TemplateTxt);

                if (storedAlarmInfo == default)
                {
                    storedAlarmInfo = new AlarmInfo
                    {
                        Category           = cfg.AlarmInfo.Category,
                        FacilityAccessName = cfg.AlarmInfo.FacilityAccessName,
                        DeviceName         = cfg.AlarmInfo.DeviceName,
                        Name        = cfg.AlarmInfo.Name,
                        Description = cfg.AlarmInfo.Description,
                        Condition   = cfg.AlarmInfo.Condition,
                        TemplateTxt = cfg.AlarmInfo.TemplateTxt,
                    };

                    context.AlarmsInfo.Add(storedAlarmInfo);
                    storedInfos.Add(storedAlarmInfo);
                }

                cfg.AlarmInfo = storedAlarmInfo;
            }

            await context.SaveChangesAsync(cancellationToken).ConfigureAwait(false);

            context.Dispose();
        }
Ejemplo n.º 6
0
 /// <summary>
 /// Method to reference database context (temporary save data)
 /// </summary>
 /// <param name="alarmContext"></param>
 public AlarmController(AlarmContext alarmContext)
 {
     this.alarmContext  = alarmContext;
     this.userContext   = userContext;
     this.notifications = new Notifications(userContext);
 }