public void MergeObject(String typeName, object id, ExpandoObject source) { var key = Tuple.Create(typeName, id); RefMapperItem item; if (TryGetValue(key, out item)) { if (item != null) { if ((item.Source == null) && (source != null)) { item.Source = source; } if (item.List != null) { foreach (var target in item.List) { target.CopyFrom(source); } } } } else { // forward definition item = new RefMapperItem(); item.Source = source; Add(key, item); } }
public void Add(String typeName, Object id, ExpandoObject value) { var key = Tuple.Create(typeName, id); if (!TryGetValue(key, out RefMapperItem item)) { item = new RefMapperItem(); Add(key, item); } item.AddToList(value); if (item.Source != null) { foreach (var target in item.List) { target.CopyFrom(item.Source); } } }