public void Save(object entity) { CheckDisposed(); int id; // already being saved or updated? if (_saved.Contains(entity) || _updated.Contains(entity)) { return; } // is it a new object? if (_identityMap.TryGetDocumentId(entity, out id)) { // already being updated? if (_updated.Contains(entity)) { return; } _updated.Add(entity); return; } // Does it have a valid identifier? var accessor = _store.GetIdAccessor(entity.GetType(), "Id"); if (accessor != null) { id = accessor.Get(entity); if (id > 0) { _identityMap.Add(id, entity); _updated.Add(entity); return; } } // Then assign a new identifier if it has one if (accessor != null) { // it's a new entity var collection = CollectionHelper.Current.GetSafeName(); id = _store.GetNextId(collection); accessor.Set(entity, id); _identityMap.Add(id, entity); } _saved.Add(entity); }
public void TestSimpleObjectMap() { IdentityMap<SimpleObject> simpleMap = new IdentityMap<SimpleObject>(); simpleMap.Add(new SimpleObject(), Guid.NewGuid()); simpleMap.Add(new SimpleObject(), Guid.NewGuid()); simpleMap.Add(new SimpleObject(), Guid.NewGuid()); simpleMap.Add(new SimpleObject(), Guid.NewGuid()); foreach (SimpleObject curObj in simpleMap.GetEnumerable()) { Console.WriteLine(curObj.ToString()); } }
public void Save(object entity) { // is it a new object? if (!_identityMap.HasEntity(entity)) { // already beging saved? if (_saved.Contains(entity)) { return; } // then assign it an identifier var accessor = _store.GetIdAccessor(entity.GetType(), "Id"); if (accessor != null) { var id = accessor.Get(entity); // do we need to track the entity if (id > 0) { _identityMap.Add(id, entity); _updated.Add(entity); return; } else { // it's a new entity var collection = CollectionHelper.Current.GetSafeName(); id = _store.GetNextId(collection); accessor.Set(entity, id); } } _saved.Add(entity); } else { // update it _updated.Add(entity); } }
public bool Add(ITerm <Value> Term, Dictionary <long, RiskItemCharacteristicIDAttributes> CoverageIdAttrMap, Dictionary <string, HashSet <long> > ResolvedSchedule, bool CheckForPerRisk = true) { Subject NodeIdentity = Term.GetSubject(); bool IsAddSuccessful = true; if (NodeIdentity == null) { NodeIdentity = EMPTYSUBJECTCONSTRAINT; } TermCollection TermCollection = (IdentityMap.ContainsKey(NodeIdentity) ? IdentityMap[NodeIdentity].GetContent() : new TermCollection(NodeIdentity)); // Switching off the following check intentionally, in order to allow redundant terms //if (TermCollection.Contains(Term)) // throw new ArgumentException("A term node with the same identity (i.e. subject) already contains this term in its collection!"); IsAddSuccessful = TermCollection.Add(Term); if (IsAddSuccessful && !IdentityMap.ContainsKey(NodeIdentity)) { TermNode _TermNode = new TermNode(TermCollection); IsAddSuccessful &= base.Add(_TermNode); if (IsAddSuccessful) { IdentityMap.Add(NodeIdentity, _TermNode); // A newly added term node (i.e. with no parent or child links) is both a root and a leaf, trivially. IsAddSuccessful &= RootNodes.Add(_TermNode); ExecutionState.RegisterModificationInGraphTopology(); } } return(IsAddSuccessful); }