/// <summary> /// Imports aircraft records. /// </summary> /// <param name="source"></param> /// <param name="dest"></param> private void ProcessAircraft(IBaseStationDatabaseSQLite source, IBaseStationDatabase dest) { _AircraftMap.Clear(); if (!ImportAircraft) { WriteLog("Aircraft import skipped"); } else { WriteLog("Importing Aircraft records"); var allSource = source.GetAllAircraft().ToDictionary(r => r.AircraftID, r => r); var upsertCandidates = new List <BaseStationAircraftUpsert>(); var upsertKeys = new HashSet <string>(); foreach (var kvp in allSource) { if (!upsertKeys.Contains(kvp.Value.ModeS)) { upsertCandidates.Add(new BaseStationAircraftUpsert(kvp.Value)); upsertKeys.Add(kvp.Value.ModeS); } } upsertKeys.Clear(); var upserted = dest.UpsertManyAircraft(upsertCandidates).ToDictionary(r => r.ModeS, r => r); upsertCandidates.Clear(); foreach (var sourceKvp in allSource) { var sourceID = sourceKvp.Key; if (upserted.TryGetValue(sourceKvp.Value.ModeS, out var rec)) { _AircraftMap.Add(sourceID, rec.AircraftID); } } WriteLog($" Imported {upserted.Count:N0} / {allSource.Count:N0} aircraft"); } }