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); }