public void MergeDataFromDisk(ConnectionIntellisenseData data)
        {
            if (data == null)
            {
                return;
            }

            if (data.Entities != null)
            {
                if (this.Entities == null)
                {
                    this.Entities = new ConcurrentDictionary <string, EntityIntellisenseData>(StringComparer.InvariantCultureIgnoreCase);
                }

                foreach (var entityData in data.Entities.Values)
                {
                    if (!this.Entities.ContainsKey(entityData.EntityLogicalName))
                    {
                        this.Entities.TryAdd(entityData.EntityLogicalName, entityData);
                    }
                    else
                    {
                        this.Entities[entityData.EntityLogicalName].MergeDataFromDisk(entityData);
                    }
                }
            }
        }
        public HashSet <string> GetLinkedEntities(ConnectionIntellisenseData connectionIntellisense)
        {
            HashSet <string> result = new HashSet <string>(StringComparer.InvariantCultureIgnoreCase);

            AddReferencingEntities(result, this, true);

            if (this.ManyToOneRelationships != null && connectionIntellisense.Entities != null)
            {
                foreach (var item in this.ManyToOneRelationships.Values.ToList())
                {
                    if (!string.IsNullOrEmpty(item.TargetEntityName))
                    {
                        result.Add(item.TargetEntityName);

                        if (connectionIntellisense.Entities.ContainsKey(item.TargetEntityName))
                        {
                            var targetEntity = connectionIntellisense.Entities[item.TargetEntityName];

                            if (!IsCommonAttribute(item.BaseAttributeName))
                            {
                                AddReferencingEntities(result, targetEntity, false);
                            }
                        }
                    }
                }
            }

            return(result);
        }
        public static ConnectionIntellisenseData Get(ConnectionData connectionData)
        {
            var filePath = GetFilePath(connectionData.ConnectionId);

            ConnectionIntellisenseData result = null;

            if (File.Exists(filePath))
            {
                DataContractSerializer ser = new DataContractSerializer(typeof(ConnectionIntellisenseData));

                using (Mutex mutex = new Mutex(false, FileOperations.GetMutexName(filePath)))
                {
                    try
                    {
                        mutex.WaitOne();

                        using (var sr = File.OpenRead(filePath))
                        {
                            result              = ser.ReadObject(sr) as ConnectionIntellisenseData;
                            result.FilePath     = filePath;
                            result.ConnectionId = connectionData.ConnectionId;
                        }
                    }
                    catch (Exception ex)
                    {
                        DTEHelper.WriteExceptionToOutput(connectionData, ex);

                        FileOperations.CreateBackUpFile(filePath, ex);
                    }
                    finally
                    {
                        mutex.ReleaseMutex();
                    }
                }
            }

            return(result);
        }