Ejemplo n.º 1
0
        /// <inheritdoc />
        public async Task Save(IndexValue indexValue)
        {
            using var session = _sessionFunc();
            var values      = indexValue.IndexValues().ToArray();
            var id          = (StringValue)values.First(x => x.Name == "internal_forResource").Values[0];
            var resource    = (StringValue)values.First(x => x.Name == "internal_resource").Values[0];
            var canonicalId = (StringValue)values.First(x => x.Name == "internal_Id").Values[0];
            var entry       = new IndexEntry(id.Value, canonicalId.Value, resource.Value, new Dictionary <string, object>());

            foreach (var value in values)
            {
                var array = value.Values.Where(x => x != null).Select(GetValue).ToHashSet();
                var o     = array.Count == 1 ? array.First() : array;
                if (entry.Values.ContainsKey(value.Name))
                {
                    var existing = entry.Values[value.Name];
                    switch (existing)
                    {
                    case HashSet <object> l:
                        switch (o)
                        {
                        case HashSet <object> list:
                            foreach (var item in list)
                            {
                                l.Add(item);
                            }

                            break;

                        default:
                            l.Add(o);
                            break;
                        }

                        entry.Values[value.Name] = l;
                        break;

                    case object x:
                        entry.Values[value.Name] = new HashSet <object> {
                            x, o
                        };
                        break;
                    }
                }
                else
                {
                    entry.Values.Add(value.Name, o);
                }
            }

            session.DeleteWhere <IndexEntry>(x => x.CanonicalId == canonicalId.Value);
            session.Store(entry);
            await session.SaveChangesAsync().ConfigureAwait(false);
        }
Ejemplo n.º 2
0
 public static IEnumerable <IndexValue> NonInternalValues(this IndexValue root)
 {
     return(root.IndexValues().Where(v => !v.Name.StartsWith("internal_")));
 }