public static bool RecordScan(int deviceId, ScanType scanType, DateTime scanStartTime)
        {
            Transaction transaction = new Transaction(IsolationLevel.RepeatableRead, "ScanHistoryUpdate");

            try
            {
                DeviceEntity device = new DeviceEntity();
                transaction.Add(device);
                device.FetchUsingPK(deviceId);

                device.ScansUsed      = device.ScansUsed + 1;
                device.ScansAvailable = device.ScansAvailable - 1;

                ScanHistoryEntity history = device.ScanHistories.AddNew();
                history.ScanType      = scanType;
                history.ScanStartTime = scanStartTime;

                device.Save(true);                              // recurse=true; will also save the history record

                transaction.Commit();

                return(true);
            }
            catch (Exception)
            {
                transaction.Rollback();
                return(false);
            }
            finally
            {
                transaction.Dispose();
            }
        }
        public static Boolean DecrementScansImpl(string deviceUniqueKeyVar, DateTime scanTime, short scanType)
        {
            Transaction transactionManager = new Transaction(IsolationLevel.ReadCommitted, "Decrement Scans");
            int         deviceId           = DataHelpers.KeyToIdHelpers.ConvertDeviceKey(deviceUniqueKeyVar);
            // Add in history record
            ScanHistoryEntity scanHistoryEntity = new ScanHistoryEntity();

            scanHistoryEntity.DeviceId = deviceId;
            //scanHistoryEntity.ScanTypeId = scanType;
            scanHistoryEntity.ScanStartTime = scanTime;
            scanHistoryEntity.Save();
            // Decrement useage counts
            DeviceEntity deviceEntity = new DeviceEntity(deviceId);

            deviceEntity.ScansAvailable = deviceEntity.ScansAvailable - 1;
            deviceEntity.Save();
            transactionManager.Commit();
            transactionManager.Dispose();
            return(true);
        }