/// <summary> /// Determinate two reference is equal or not /// </summary> /// <param name="obj"></param> /// <returns></returns> public override bool Equals(object obj) { // // Initialize result bool result = false; // // Check if (obj is ReferenceInformation) { ReferenceInformation refer = obj as ReferenceInformation; if (this.PKTableName.Equals(refer.PKTableName) && this.PKColumnName.Equals(refer.PKColumnName) && this.FKTableName.Equals(refer.FKTableName) && this.FKColumnName.Equals(refer.FKColumnName)) { result = true; } } // // Return result return(result); }
/// <summary> /// Has circle reference /// </summary> /// <param name="tableName"></param> /// <param name="referenceTable"></param> /// <param name="listTableHasCheck"></param> /// <returns></returns> private bool HasCircleReference(string tableName, ReferenceInformation reference, List<string> listTableHasCheck, List<string> tracking) { // // Initialize result bool result = false; // // Check current reference if (reference.PKTableName.Equals(tableName)) { result = true; } else { // // Try to get referenced table // And go deeper (using recursion algorithm) MapTable referencedTable = this.GetMapTable(reference.PKTableName); List<ReferenceInformation> listReference = referencedTable.GetReference(); listTableHasCheck.Add(referencedTable.Name); foreach (ReferenceInformation childReference in listReference) { // // Check if (childReference.PKTableName.Equals(tableName)) { // Add to tracking list if needed if (tracking != null) { tracking.Add(referencedTable.Name); } result = true; break; } // // If referenced table is checked // We don't need to go further if (listTableHasCheck.Contains(childReference.PKTableName)) { continue; } // // Else try to go deeper bool response = this.HasCircleReference(tableName, childReference, listTableHasCheck, tracking); if (response) { // Add to tracking list if needed if (tracking != null) { tracking.Add(referencedTable.Name); } result = true; break; } } } // // Return result return result; }
/// <summary> /// Check this table has this reference or not /// </summary> /// <param name="reference"></param> /// <returns></returns> public bool HasReference(ReferenceInformation reference) { // // Initialize result bool result = false; // // Check foreach (ReferenceInformation refer in this._listReference) { if (refer.Equals(reference)) { result = true; break; } } // // Return result return result; }
/// <summary> /// Remove reference /// </summary> /// <param name="reference"></param> public void RemoveReference(ReferenceInformation reference) { this._listReference.Remove(reference); }
/// <summary> /// Add reference /// </summary> /// <param name="table"></param> public void AddReference(ReferenceInformation reference) { this._listReference.Add(reference); }