Exemplo n.º 1
0
        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>()
            });
        }
Exemplo n.º 2
0
 private KeyValuePair <string, IEnumerable <JMDictEntry> > SimpleMap(DbDictEntryKeyValue kvp)
 {
     return(kvp.To(e => e.To(en => en.To())));
 }