示例#1
0
        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());
            }
        }
示例#3
0
        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);
            }
        }
示例#4
0
        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);
        }