/// <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 }); } }