/// <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);
            }
        }
        /// <summary>
        /// Saves the specified composite EGM meter data.
        /// </summary>
        /// <param name="compositeEgmMeterData">The composite EGM meter data.</param>
        public void Save(CompositeEgmMeterData compositeEgmMeterData)
        {
            using (var context = new HmsDbContext())
            {
                //context.Database.Log = Console.Write;

                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);
                }
                else
                {
                    // matching PK found, thus we update state of existing CompositeEgmMeterData entity
                    DaoUtilities.SaveUpdatedEntity(context, context.CompositeEgmMeterDatas, compositeEgmMeterData,
                                                   UpdateExistingEntityState);
                }
            }
        }
        /// <summary>
        /// Gets the CompositeEgmMeterData with the specified composite key.
        /// </summary>
        /// <param name="compositeKey">The composite key.</param>
        /// <returns>CompositeEgmMeterData.</returns>
        public CompositeEgmMeterData GetByCompositeKey(EgmCompositeKey compositeKey)
        {
            using (var context = new HmsDbContext())
            {
                CompositeEgmMeterData retval = null;

                var candidates = context.CompositeEgmMeterDatas.AsQueryable()
                                 .Where(cemd => cemd.AuditDate == compositeKey.AuditDate)
                                 .Where(cemd => cemd.CasinoName == compositeKey.CasinoName)
                                 .Where(cemd => cemd.SerialNumber == compositeKey.EgmSerialNumber)
                                 .Where(cemd => cemd.AssetNumber == compositeKey.EgmAssetNumber)
                                 .Where(cemd => cemd.GameTheme == compositeKey.GameTheme)
                                 .Where(cemd => cemd.Denomination == compositeKey.Denomination)
                                 .OrderBy(cemd => cemd.Id)
                                 .ToList();

                // we expect only 1 match to this query
                // if we find more than 1, something is amiss
                if (1 == candidates.Count)
                {
                    retval = candidates[0];
                }
                else if (1 < candidates.Count)
                {
                    Logger.Warn(
                        $"CompositeEgmMeterDataDao.GetByCompositeKey found {candidates.Count} matches with a composite key of {compositeKey}. Should only ever be 1 record which matches a composite key.");
                    retval = candidates[0];
                    //for (var iCandidate = 1; iCandidate < candidates.Count; ++iCandidate)
                    //{
                    //    DaoUtilities.DeleteEntity(context, context.CompositeEgmMeterDatas, candidates[iCandidate]);
                    //}
                }

                return(retval);
            }
        }
 /// <summary>
 /// Sets the new state of the entity.
 /// </summary>
 /// <param name="entity">The entity.</param>
 private static void SetNewEntityState(CompositeEgmMeterData entity)
 {
     entity.Version = 0;
 }