Пример #1
0
        /// <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");
            }
        }