/// <summary>
        /// Asynchronously inserts meter reading data into the database if it is unique otherwise ignores it.
        /// </summary>
        /// <param name="meterReadings">Meter reading data to insert.</param>
        /// <returns>DbResult detailing the result of the insert operation.</returns>
        public async Task <DbResult> InsertEntriesAsync(ICollection <MeterReading> meterReadings)
        {
            using (var context = new MeterReaderContext()) {
                IEnumerable <MeterReading> validReadings = RemoveInvalidReadings(meterReadings, context);

                try {
                    foreach (MeterReading reading in validReadings)
                    {
                        reading.Id = GenerateMeterReadingId(reading);
                    }

                    int initialRowCount = context.MeterReadings.Count();

                    await context.BulkMergeAsync(validReadings);

                    int finalRowCount = context.MeterReadings.Count();
                    int insertCount   = finalRowCount - initialRowCount;

                    return(new DbResult {
                        InsertCount = insertCount,
                        ErrorCount = meterReadings.Count - insertCount
                    });
                }
                catch (Exception e) {
                    return(new DbResult {
                        InsertCount = 0,
                        ErrorCount = meterReadings.Count
                    });
                }
            }
        }
        /// <summary>
        /// Asynchronously inserts account data into the database if it is unique otherwise ignores it.
        /// </summary>
        /// <param name="accounts">Account data to insert.</param>
        /// <returns>DbResult detailing the result of the insert operation.</returns>
        public async Task <DbResult> InsertEntriesAsync(ICollection <CustomerAccount> accounts)
        {
            using (var context = new MeterReaderContext()) {
                int initialRowCount = context.Accounts.Count();

                await context.BulkMergeAsync(accounts);

                int finalRowCount = context.Accounts.Count();
                int insertCount   = finalRowCount - initialRowCount;

                return(new DbResult {
                    InsertCount = insertCount,
                    ErrorCount = accounts.Count - insertCount
                });
            }
        }