private void FillDatabase(IReadOnlyDictionary <string, List <JMDictEntry> > root) { senses.Delete(_ => true); entries.Delete(_ => true); kvps.Delete(_ => true); version.Delete(_ => true); var sensesDict = root.Values .SelectMany(e => e.SelectMany(p => p.Senses)) .Distinct() .Select((s, i) => (s, i + 2)) .ToDictionary(kvp => kvp.Item1, kvp => DbSense.From(kvp.Item1, kvp.Item2)); var entriesDict = root.Values .SelectMany(e => e) .Distinct() .Select((e, i) => (e, i + 2)) .ToDictionary( kvp => kvp.Item1, kvp => DbDictEntry.From(kvp.Item1, s => sensesDict[s], kvp.Item2)); var kvpsDict = root .ToDictionary(kvp => DbDictEntryKeyValue.From( new KeyValuePair <string, IEnumerable <JMDictEntry> >(kvp.Key, kvp.Value), e => entriesDict[e])); senses.InsertBulk(sensesDict.Values); entries.InsertBulk(entriesDict.Values); kvps.InsertBulk(kvpsDict.Select(kvp => DbDictEntryKeyValue.From( new KeyValuePair <string, IEnumerable <JMDictEntry> >(kvp.Value.Key, kvp.Value.Value), e => entriesDict[e]))); kvps.EnsureIndex(x => x.LookupKey); version.Insert(new DbDictVersion { DbVersion = Version, OriginalFileSize = -1, OriginalFileHash = Array.Empty <byte>() }); }
private KeyValuePair <string, IEnumerable <JMDictEntry> > SimpleMap(DbDictEntryKeyValue kvp) { return(kvp.To(e => e.To(en => en.To()))); }