public SharedObjectRepository(DomainObjectInquiry objectInquiry, DomainObjectFactory objectFactory)
 {
     m_sharedObjRepository = new ObjectRepository(SessionIdentifier.SHARED_SESSION, objectInquiry);
     m_objectFactory = objectFactory;
 }
        //public DomainObject GetObject(SessionIdentifier sessionId, ObjectIdentifier objectId)
        //{
        //    //return m_document[sessionId].GetObject(objectId);
        //}
        public void SaveRepositoryChanges(ObjectRepository objRepository)
        {
            lock (m_sharedObjRepositoryLock)
            {
                foreach (DomainObject obj in objRepository.NewObject)
                {
                    DomainObject sharedObj = CloneObject(obj, SessionIdentifier.SHARED_SESSION);
                    m_sharedObjRepository.Add(sharedObj);
                }

                foreach (DomainObject obj in objRepository.PropertyModifiedObject)
                {
                    DomainObject sharedObj = CloneObject(obj, SessionIdentifier.SHARED_SESSION);
                    m_sharedObjRepository.ChangeTo(sharedObj);
                }
            }
        }
        private void SateToDB(SessionIdentifier session, ObjectRepository objRepository)
        {
            foreach (IGrouping<string, DomainObject> newObjGroup in objRepository.NewObjectGroup)
            {
                string objCode = newObjGroup.Key;

                DomainObjectBroker objBroker = GetObjectBroker(objCode);
                DbCommonCommand saveCommand = objBroker.NewItemCommand;

                SaveObject(session, newObjGroup, saveCommand);
            }

            foreach (IGrouping<string, DomainObject> saveObjGroup in objRepository.OldChangedObjects)
            {
                string objCode = saveObjGroup.Key;

                DomainObjectBroker objBroker = GetObjectBroker(objCode);
                DbCommonCommand saveCommand = objBroker.SaveItemCommand;

                SaveObject(session, saveObjGroup, saveCommand);
            }

            foreach (IGrouping<string, DomainObject> deleteObjGroup in objRepository.DeletedObjects)
            {
                string objCode = deleteObjGroup.Key;

                DomainObjectBroker objBroker = GetObjectBroker(objCode);
                DbCommonCommand deleteCommand = objBroker.DeleteItemsCommand;

                deleteCommand[DomainObjectBroker.ObjectIdField].Value = deleteObjGroup;
                deleteCommand.ExecuteNonQuery(session, true);
            }

            foreach (KeyValuePair<DomainLink, IEnumerable<DomainLinkNode>> link in objRepository.NewLinks)
            {
                DomainLinkBroker linkBroker = GetLinkBroker(link.Key.Key);
                DbCommonCommand dbCommand = linkBroker.NewItemCommand;

                SaveLink(session, link, dbCommand);
            }

            foreach (KeyValuePair<DomainLink, IEnumerable<DomainLinkNode>> link in objRepository.DeletedLinks)
            {
                DomainLinkBroker linkBroker = GetLinkBroker(link.Key.Key);
                DbCommonCommand dbCommand = linkBroker.DeleteItemCommand;

                SaveLink(session, link, dbCommand);
            }

            m_connection.Commit(session);
        }
Beispiel #4
0
 internal Document(SessionIdentifier sid, DomainObjectInquiry inquiry)
 {
     Session = sid;
     m_objRepository = new ObjectRepository(Session, inquiry);
 }
        public void SaveRepository(SessionIdentifier session, ObjectRepository objRepository)
        {
            SateToDB(session, objRepository);

            // Скопировать данные в глобальный репозиторий
            SharedRepository.SaveRepositoryChanges(objRepository);

            // DocumentManager.Instance.

            // Сбросить состояния объектов
            objRepository.ResetObjectState();
            // Сбросить состояния ссылок
            objRepository.ResetLinkState();

            //m_documentManager.SaveDocument(this);

            //// Записать в глобальный кеш новые объект
            //foreach (ObjectIdentifier objectId in NewObject)
            //{
            //    EntityObject obj = objectStorage[objectId];
            //}
            //// очистить коллекции созданных объектов
            //NewObject.Clear();

            //// Список id объектов уже перезаписанных в кеше
            //List<ObjectIdentifier> unlockList = new List<ObjectIdentifier>();
            //// добавить измененный объект (свойства) в список для снятия блокировки
            //foreach (ObjectIdentifier oid in ChangedObjectProperty)
            //{
            //    unlockList.Add(oid);
            //    EntityObject obj = objectStorage[oid];
            //}
            //ChangedObjectProperty.Clear();

            //// добавить измененный объект (свойства) в список для снятия блокировки
            //foreach (ObjectIdentifier oid in ChangedObjectLink)
            //{
            //    if (!unlockList.Contains(oid))
            //    {
            //        unlockList.Add(oid);
            //        EntityObject obj = objectStorage[oid];
            //    }
            //}
            //ChangedObjectLink.Clear();

            //// очистить из хранилища удаленные объекты
            //foreach (List<ObjectIdentifier> list in m_removeObjectList.Values)
            //{
            //    foreach (ObjectIdentifier oid in list)
            //    {
            //        objectStorage.Remove(oid);
            //    }
            //}
            //m_removeObjectList.Clear();
        }