Ejemplo n.º 1
0
        /// <summary>
        /// Saves the specified egm metrics.
        /// </summary>
        /// <param name="egmMetrics">The egm metrics.</param>
        public void Save(ICollection <EgmMetric> egmMetrics)
        {
            using (var context = new HmsDbContext())
            {
                //context.Database.Log = Console.Write;

                foreach (var egmMetric in egmMetrics)
                {
                    if (!context.EgmMetrics.Any(metric => metric.Id == egmMetric.Id))
                    {
                        // no matching PK for this EgmMetric in database,
                        // thus we create new entity and add it to db
                        DaoUtilities.SaveCreatedEntity(context, context.EgmMetrics, egmMetric,
                                                       SetNewEntityState, false);
                    }
                    else
                    {
                        // matching PK found, thus we update state of existing EgmMetric entity
                        DaoUtilities.SaveUpdatedEntity(context, context.EgmMetrics, egmMetric,
                                                       UpdateExistingEntityState, false);
                    }
                }

                DaoUtilities.SaveToDbWithRetry(context, DaoUtilities.SaveType.UpdateExistingEntity,
                                               ResolveEntityUpdateConflict);
            }
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Gets the EgmWindowsEvent entity with the specified ID/PK.
 /// </summary>
 /// <param name="windowsEventId">The windows event identifier.</param>
 /// <returns>EgmWindowsEvent.</returns>
 public EgmWindowsEvent GetById(long windowsEventId)
 {
     using (var context = new HmsDbContext())
     {
         return(context.EgmWindowsEvents.Find(windowsEventId));
     }
 }
Ejemplo n.º 3
0
 /// <summary>
 /// Gets the EgmMetric entity with the specified ID/PK.
 /// </summary>
 /// <param name="metricId">The metric identifier.</param>
 /// <returns>EgmMetric.</returns>
 public EgmMetric GetById(long metricId)
 {
     using (var context = new HmsDbContext())
     {
         return(context.EgmMetrics.Find(metricId));
     }
 }
 /// <summary>
 /// Gets the CompositeEgmMeterData entity with the specified ID/PK.
 /// </summary>
 /// <param name="compositeMeterDataId">The composite EGM meter data identifier.</param>
 /// <returns>CompositeEgmMeterData.</returns>
 public CompositeEgmMeterData GetById(long compositeMeterDataId)
 {
     using (var context = new HmsDbContext())
     {
         return(context.CompositeEgmMeterDatas.Find(compositeMeterDataId));
     }
 }
        /// <summary>
        /// Saves the specified composite egm meter datas.
        /// </summary>
        /// <param name="compositeEgmMeterDatas">The composite egm meter datas.</param>
        public void Save(ICollection <CompositeEgmMeterData> compositeEgmMeterDatas)
        {
            using (var context = new HmsDbContext())
            {
                //context.Database.Log = Console.Write;

                foreach (var compositeEgmMeterData in compositeEgmMeterDatas)
                {
                    if (!context.CompositeEgmMeterDatas.Any(cemd => cemd.Id == compositeEgmMeterData.Id))
                    {
                        // no matching PK for this CompositeEgmMeterData in database,
                        // thus we create new entity and add it to db
                        DaoUtilities.SaveCreatedEntity(context, context.CompositeEgmMeterDatas, compositeEgmMeterData,
                                                       SetNewEntityState, false);
                    }
                    else
                    {
                        // matching PK found, thus we update state of existing CompositeEgmMeterData entity
                        DaoUtilities.SaveUpdatedEntity(context, context.CompositeEgmMeterDatas, compositeEgmMeterData,
                                                       UpdateExistingEntityState, false);
                    }
                }

                DaoUtilities.SaveToDbWithRetry(context, DaoUtilities.SaveType.UpdateExistingEntity,
                                               ResolveEntityUpdateConflict);
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Gets all unsent EgmWindowsEvent entities.
        /// </summary>
        /// <param name="reported">if set to <c>true</c> includes only EgmWindowsEvents which have been reported.</param>
        /// <param name="maxRecords">The maximum records to return from a query.</param>
        /// <returns>ICollection&lt;EgmWindowsEvent&gt;.</returns>
        public ICollection <EgmWindowsEvent> GetUnsent(bool reported  = false,
                                                       int maxRecords = DaoUtilities.NoRecordLimit)
        {
            using (var context = new HmsDbContext())
            {
                var query =
                    context.EgmWindowsEvents.AsQueryable().Where(winEvt => winEvt.SentAt == DaoUtilities.UnsentData);
                if (reported)
                {
                    query = query.Where(winEvt => winEvt.ReportGuid != Guid.Empty);
                }

                query = query.OrderBy(winEvt => winEvt.CasinoCode)
                        .ThenBy(winEvt => winEvt.EgmSerialNumber)
                        .ThenBy(winEvt => winEvt.EgmAssetNumber)
                        .ThenBy(winEvt => winEvt.ReportedAt)
                        .ThenBy(winEvt => winEvt.OccurredAt);

                if (DaoUtilities.NoRecordLimit != maxRecords && 0 < maxRecords)
                {
                    query = query.Take(maxRecords);
                }

                return(query.ToList());
            }
        }
Ejemplo n.º 7
0
 /// <summary>
 /// Saves Pending Changes in the Open Context to the database.
 /// </summary>
 /// <param name="context">The context.</param>
 public static void SaveToDb(HmsDbContext context)
 {
     try
     {
         context.SaveChanges();
     }
     catch (DbUpdateConcurrencyException dbcex)
     {
         // This type of exception is indicative of an optimistic locking conflict - e.g., another
         // thread has updated the same db record after we had pulled the entity out of the db, but before
         // we saved. In such situations, we re-throw here so the calling code can retry the save if possible.
         Logger.Warn(
             $"DaoUtilities.SaveToDb : DbUpdateConcurrencyException caught - [{dbcex.Message}]");
         throw;
     }
     catch (Exception ex)
     {
         Logger.Warn($"DaoUtilities.SaveToDb : Exception caught - [{ex.Message}]");
         var innerEx = ex.InnerException;
         while (null != innerEx)
         {
             Logger.Warn($"DaoUtilities.SaveToDb : Inner Exception: [{innerEx.Message}]");
             innerEx = innerEx.InnerException;
         }
     }
 }
Ejemplo n.º 8
0
 /// <summary>
 /// Updates the version of the specified entity.
 /// </summary>
 /// <param name="context">The context.</param>
 /// <param name="entityEntry">The entity entry</param>
 public static void UpdateVersion(HmsDbContext context, DbEntityEntry entityEntry)
 {
     if ((entityEntry.State & EntityState.Modified) != 0)
     {
         ((EntityBase)entityEntry.Entity).Version++;
     }
 }
Ejemplo n.º 9
0
 /// <summary>
 /// Gets the EgmMeterReading entity with the specified ID/PK.
 /// </summary>
 /// <param name="meterReadingId">The meter reading identifier.</param>
 /// <returns>EgmMeterReading.</returns>
 public EgmMeterReading GetById(long meterReadingId)
 {
     using (var context = new HmsDbContext())
     {
         return(context.EgmMeterReadings.Find(meterReadingId));
     }
 }
Ejemplo n.º 10
0
        /// <summary>
        /// Gets all unsent EgmMeterReading entities.
        /// </summary>
        /// <param name="reported">if set to <c>true</c> includes only EgmMeterReadings which have been reported.</param>
        /// <param name="maxRecords">The maximum records to include in the query result.</param>
        /// <returns>ICollection&lt;EgmMeterReading&gt;.</returns>
        public ICollection <EgmMeterReading> GetUnsent(bool reported  = false,
                                                       int maxRecords = DaoUtilities.NoRecordLimit)
        {
            using (var context = new HmsDbContext())
            {
                var query = context.EgmMeterReadings.AsQueryable().Where(mr => mr.SentAt == DaoUtilities.UnsentData);
                if (reported)
                {
                    query = query.Where(mr => mr.ReportGuid != Guid.Empty);
                }

                query = query.OrderBy(mr => mr.CasinoCode)
                        .ThenBy(mr => mr.EgmSerialNumber)
                        .ThenBy(mr => mr.EgmAssetNumber)
                        .ThenBy(mr => mr.GameTitle)
                        .ThenBy(mr => mr.GameDenomination)
                        .ThenBy(mr => mr.ReportedAt).ThenBy(mr => mr.ReadAt);

                if (DaoUtilities.NoRecordLimit != maxRecords && 0 < maxRecords)
                {
                    query = query.Take(maxRecords);
                }

                return(query.ToList());
            }
        }
Ejemplo n.º 11
0
 /// <summary>
 /// Gets the EgmVersion entity with the specified ID/PK.
 /// </summary>
 /// <param name="versionId">The version identifier.</param>
 /// <returns>EgmMeterReading.</returns>
 public EgmVersion GetById(long versionId)
 {
     using (var context = new HmsDbContext())
     {
         return(context.EgmVersions.Find(versionId));
     }
 }
Ejemplo n.º 12
0
 /// <summary>
 /// Gets EgmMetric Entities older than specified date-time.
 /// </summary>
 /// <param name="oldDateTime">The time to use for the older-than comparison.</param>
 /// <returns>ICollection&lt;EgmMetric&gt;.</returns>
 public ICollection <EgmMetric> GetOlderThan(DateTime oldDateTime)
 {
     using (var context = new HmsDbContext())
     {
         return
             (context.EgmMetrics.AsQueryable()
              .Where(mr => mr.ReportedAt != DaoUtilities.UnsentData && mr.ReportedAt <= oldDateTime)
              .ToList());
     }
 }
Ejemplo n.º 13
0
 /// <summary>
 /// Gets EgmEvent Entities older than specified date-time.
 /// </summary>
 /// <param name="oldDateTime">The time to use for the older-than comparison.</param>
 /// <returns>ICollection&lt;EgmEvent&gt;.</returns>
 public ICollection <EgmEvent> GetOlderThan(DateTime oldDateTime)
 {
     using (var context = new HmsDbContext())
     {
         return
             (context.EgmEvents.AsQueryable()
              .Where(evt => evt.ReportedAt != DaoUtilities.UnsentData && evt.ReportedAt < oldDateTime)
              .ToList());
     }
 }
Ejemplo n.º 14
0
 /// <summary>
 /// Cleans EgmMetric Entities older than specified date-time.
 /// </summary>
 /// <param name="oldDateTime">The old date time.</param>
 public void CleanOlderThan(DateTime oldDateTime)
 {
     using (var context = new HmsDbContext())
     {
         context.EgmMetrics.RemoveRange(
             context.EgmMetrics.Where(
                 mr => mr.ReportedAt != DaoUtilities.UnsentData && mr.ReportedAt < oldDateTime));
         DaoUtilities.SaveToDbWithRetry(context, DaoUtilities.SaveType.DeleteExistingEntity,
                                        ResolveEntityUpdateConflict);
     }
 }
Ejemplo n.º 15
0
 /// <summary>
 /// Saves the created entity.
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="context">The context.</param>
 /// <param name="dbSet">The database set.</param>
 /// <param name="entity">The entity.</param>
 /// <param name="createEntityAction">The create entity action.</param>
 /// <param name="doSaveChanges">if true, save changes in HmsDbContext; otherwise do not</param>
 public static void SaveCreatedEntity <T>(HmsDbContext context, DbSet <T> dbSet, T entity,
                                          Action <T> createEntityAction, bool doSaveChanges = true)
     where T : EntityBase
 {
     createEntityAction(entity);
     dbSet.Add(entity);
     if (doSaveChanges)
     {
         SaveToDb(context);
     }
 }
Ejemplo n.º 16
0
        /// <summary>
        /// Saves to database with retry.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="saveType">Type of the save.</param>
        /// <param name="resolveConflict">The function to call when conflict resolution is needed.</param>
        public static void SaveToDbWithRetry(HmsDbContext context, SaveType saveType,
                                             Action <HmsDbContext, DbEntityEntry> resolveConflict)
        {
            var numSaveAttempts = 0;

            while (MaxSaveRetries > numSaveAttempts)
            {
                try
                {
                    SaveToDb(context);
                    break;
                }
                catch (DbUpdateConcurrencyException ex)
                {
                    if (MaxSaveRetries <= ++numSaveAttempts)
                    {
                        Logger.Warn(
                            $"DaoUtilities.SaveToDbWithRetry - DbUpdateConcurrencyException retry count exceeded max limit of {MaxSaveRetries}. Aborting.");
                    }
                    else
                    {
                        Logger.Info(
                            $"DaoUtilities.SaveToDbWithRetry - DbUpdateConcurrencyException caught [{ex.Message}]; retrying context save");
                        switch (saveType)
                        {
                        case SaveType.AddNewEntity:
                            // This should never happen - No-op
                            break;

                        case SaveType.DeleteExistingEntity:
                            foreach (var failedEntityEntry in ex.Entries)
                            {
                                failedEntityEntry.Reload();
                                failedEntityEntry.State = EntityState.Deleted;
                            }

                            break;

                        case SaveType.UpdateExistingEntity:
                            foreach (var failedEntityEntry in ex.Entries)
                            {
                                resolveConflict(context, failedEntityEntry);
                            }

                            break;

                        default:
                            throw new ArgumentOutOfRangeException(nameof(saveType), saveType, null);
                        }
                    }
                }
            }
        }
Ejemplo n.º 17
0
 /// <summary>
 /// Gets all EgmVersion Entities.
 /// </summary>
 /// <returns>ICollection&lt;EgmVersion&gt;.</returns>
 public ICollection <EgmVersion> GetAll()
 {
     using (var context = new HmsDbContext())
     {
         return(context.EgmVersions.AsQueryable()
                .OrderBy(v => v.CasinoCode)
                .ThenBy(v => v.EgmSerialNumber)
                .ThenBy(v => v.EgmAssetNumber)
                .ThenBy(v => v.ReportedAt)
                .ToList());
     }
 }
Ejemplo n.º 18
0
        /// <summary>
        /// Deletes the specified egm windows event entity.
        /// </summary>
        /// <param name="egmWindowsEvent">The egm windows event entity.</param>
        public void Delete(EgmWindowsEvent egmWindowsEvent)
        {
            using (var context = new HmsDbContext())
            {
                if (!context.EgmWindowsEvents.Any(winEvt => winEvt.Id == egmWindowsEvent.Id))
                {
                    return;
                }

                // matching PK found, thus we proceed with Delete
                DaoUtilities.DeleteEntity(context, context.EgmWindowsEvents, egmWindowsEvent);
            }
        }
Ejemplo n.º 19
0
        /// <summary>
        /// Gets the Number of unsent EgmVersion entities.
        /// </summary>
        /// <param name="reported">if set to <c>true</c> includes only EgmVersion entities which have been reported.</param>
        /// <returns>The number of unsent EgmVersion entities</returns>
        public int NumUnsent(bool reported = false)
        {
            using (var context = new HmsDbContext())
            {
                var query = context.EgmVersions.AsQueryable().Where(v => v.SentAt == DaoUtilities.UnsentData);
                if (reported)
                {
                    query = query.Where(v => v.ReportGuid != Guid.Empty);
                }

                return(query.Count());
            }
        }
Ejemplo n.º 20
0
        /// <summary>
        /// Are there any unsent EgmMetric entities?
        /// </summary>
        /// <param name="reported">if set to <c>true</c> includes only EgmMetric entities which have been reported.</param>
        /// <returns><c>true</c> if there are any unsent EgmMetric entities, <c>false</c> otherwise.</returns>
        public bool AreUnsent(bool reported = false)
        {
            using (var context = new HmsDbContext())
            {
                var query = context.EgmMetrics.AsQueryable().Where(evt => evt.SentAt == DaoUtilities.UnsentData);
                if (reported)
                {
                    query = query.Where(evt => evt.ReportGuid != Guid.Empty);
                }

                return(query.Any());
            }
        }
        /// <summary>
        /// Deletes the specified composite egm meter data.
        /// </summary>
        /// <param name="compositeEgmMeterData">The composite egm meter data.</param>
        public void Delete(CompositeEgmMeterData compositeEgmMeterData)
        {
            using (var context = new HmsDbContext())
            {
                if (!context.CompositeEgmMeterDatas.Any(cemd => cemd.Id == compositeEgmMeterData.Id))
                {
                    return;
                }

                // matching PK found, thus we proceed with Delete
                DaoUtilities.DeleteEntity(context, context.CompositeEgmMeterDatas, compositeEgmMeterData);
            }
        }
Ejemplo n.º 22
0
 /// <summary>
 /// Gets all EgmMetric Entities.
 /// </summary>
 /// <returns>ICollection&lt;EgmMetric&gt;.</returns>
 public ICollection <EgmMetric> GetAll()
 {
     using (var context = new HmsDbContext())
     {
         return
             (context.EgmMetrics.AsQueryable()
              .OrderBy(mr => mr.CasinoCode)
              .ThenBy(mr => mr.EgmSerialNumber)
              .ThenBy(mr => mr.EgmAssetNumber)
              .ThenBy(mr => mr.ReportedAt).ThenBy(mr => mr.ReadAt)
              .ToList());
     }
 }
Ejemplo n.º 23
0
        /// <summary>
        /// Deletes the specified EgmMetric entity.
        /// </summary>
        /// <param name="egmMetric">The EgmMetric entity to delete.</param>
        public void Delete(EgmMetric egmMetric)
        {
            using (var context = new HmsDbContext())
            {
                if (!context.EgmMetrics.Any(mr => mr.Id == egmMetric.Id))
                {
                    return;
                }

                // matching PK found, thus we proceed with Delete
                DaoUtilities.DeleteEntity(context, context.EgmMetrics, egmMetric);
            }
        }
Ejemplo n.º 24
0
        /// <summary>
        /// Deletes the specified EgmVersion entity.
        /// </summary>
        /// <param name="egmVersion">The EgmVersion entity to delete.</param>
        public void Delete(EgmVersion egmVersion)
        {
            using (var context = new HmsDbContext())
            {
                if (!context.EgmVersions.Any(v => v.Id == egmVersion.Id))
                {
                    return;
                }

                // matching PK found, thus we proceed with Delete
                DaoUtilities.DeleteEntity(context, context.EgmVersions, egmVersion);
            }
        }
Ejemplo n.º 25
0
 /// <summary>
 /// Gets all EgmWindowsEvent Entities.
 /// </summary>
 /// <returns>ICollection&lt;EgmWindowsEvent&gt;.</returns>
 public ICollection <EgmWindowsEvent> GetAll()
 {
     using (var context = new HmsDbContext())
     {
         return
             (context.EgmWindowsEvents.AsQueryable()
              .OrderBy(winEvt => winEvt.CasinoCode)
              .ThenBy(winEvt => winEvt.EgmSerialNumber)
              .ThenBy(winEvt => winEvt.EgmAssetNumber)
              .ThenBy(winEvt => winEvt.ReportedAt)
              .ThenBy(winEvt => winEvt.OccurredAt)
              .ToList());
     }
 }
Ejemplo n.º 26
0
 /// <summary>
 /// Gets all unreported EgmEvent entities.
 /// </summary>
 /// <returns>ICollection&lt;EgmEvent&gt;.</returns>
 public ICollection <EgmEvent> GetUnreported()
 {
     using (var context = new HmsDbContext())
     {
         return
             (context.EgmEvents.AsQueryable()
              .Where(evt => evt.ReportGuid == Guid.Empty)
              .OrderBy(evt => evt.CasinoCode)
              .ThenBy(evt => evt.EgmSerialNumber)
              .ThenBy(evt => evt.EgmAssetNumber)
              .ThenBy(evt => evt.ReportedAt)
              .ThenBy(evt => evt.OccurredAt)
              .ToList());
     }
 }
 /// <summary>
 /// Gets all CompositeEgmMeterData Entities.
 /// </summary>
 /// <returns>ICollection&lt;CompositeEgmMeterData&gt;.</returns>
 public ICollection <CompositeEgmMeterData> GetAll()
 {
     using (var context = new HmsDbContext())
     {
         return
             (context.CompositeEgmMeterDatas.AsQueryable()
              .OrderBy(cemd => cemd.CasinoName)
              .ThenBy(cemd => cemd.SerialNumber)
              .ThenBy(cemd => cemd.AssetNumber)
              .ThenBy(cemd => cemd.GameTheme)
              .ThenBy(cemd => cemd.Denomination)
              .ThenBy(cemd => cemd.AuditDate)
              .ToList());
     }
 }
Ejemplo n.º 28
0
 /// <summary>
 /// Gets all unreported EgmMeterReading entities.
 /// </summary>
 /// <returns>ICollection&lt;EgmMeterReading&gt;.</returns>
 public ICollection <EgmMeterReading> GetUnreported()
 {
     using (var context = new HmsDbContext())
     {
         return
             (context.EgmMeterReadings.AsQueryable()
              .Where(mr => mr.ReportGuid == Guid.Empty)
              .OrderBy(mr => mr.CasinoCode)
              .ThenBy(mr => mr.EgmSerialNumber)
              .ThenBy(mr => mr.EgmAssetNumber)
              .ThenBy(mr => mr.GameTitle)
              .ThenBy(mr => mr.GameDenomination)
              .ThenBy(mr => mr.ReportedAt).ThenBy(mr => mr.ReadAt)
              .ToList());
     }
 }
Ejemplo n.º 29
0
        /// <summary>
        /// Updates the state of the existing entity.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="entityEntry">The entity entry.</param>
        /// <param name="egmWindowsEvent">The egm windows event entity.</param>
        private static void UpdateExistingEntityState(HmsDbContext context, DbEntityEntry entityEntry,
                                                      EgmWindowsEvent egmWindowsEvent)
        {
            var winEvtEntity = (EgmWindowsEvent)entityEntry.Entity;

            if (!winEvtEntity.SentAt.Equals(egmWindowsEvent.SentAt))
            {
                winEvtEntity.SentAt = egmWindowsEvent.SentAt;
            }

            if (!winEvtEntity.ReportGuid.Equals(egmWindowsEvent.ReportGuid))
            {
                winEvtEntity.ReportGuid = egmWindowsEvent.ReportGuid;
            }

            DaoUtilities.UpdateVersion(context, entityEntry);
        }
Ejemplo n.º 30
0
        /// <summary>
        /// Updates the state of the existing entity.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="entityEntry">The entity entry.</param>
        /// <param name="egmMetric">The egm metric.</param>
        private static void UpdateExistingEntityState(HmsDbContext context, DbEntityEntry entityEntry,
                                                      EgmMetric egmMetric)
        {
            var metricEntity = (EgmMetric)entityEntry.Entity;

            if (!metricEntity.SentAt.Equals(egmMetric.SentAt))
            {
                metricEntity.SentAt = egmMetric.SentAt;
            }

            if (!metricEntity.ReportGuid.Equals(egmMetric.ReportGuid))
            {
                metricEntity.ReportGuid = egmMetric.ReportGuid;
            }

            DaoUtilities.UpdateVersion(context, entityEntry);
        }