예제 #1
0
        /// <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);
 }