public TableRelation Add(TableBinding parentTable, IList<string> parentColumns, TableBinding childTable, IList<string> childColumns)
		{
			if (parentTable == null)
				throw ExceptionBuilder.ArgumentNull("parentTable");

			if (parentColumns == null)
				throw ExceptionBuilder.ArgumentNull("parentColumns");

			if (parentColumns.Count == 0)
				throw ExceptionBuilder.ArgumentArrayMustNotBeEmpty("parentColumns");

			if (childTable == null)
				throw ExceptionBuilder.ArgumentNull("childTable");

			if (childColumns == null)
				throw ExceptionBuilder.ArgumentNull("childColumns");

			if (childColumns.Count == 0)
				throw ExceptionBuilder.ArgumentArrayMustNotBeEmpty("childColumns");

			ColumnBinding[] parentColumnBindings = new ColumnBinding[parentColumns.Count];

			for (int i = 0; i < parentColumnBindings.Length; i++)
			{
				parentColumnBindings[i] = parentTable.GetColumn(parentColumns[i]);

				if (parentColumnBindings[i] == null)
					throw ExceptionBuilder.ParentColumnNotFound("parentColumns", parentTable, parentColumns[i]);
			}

			ColumnBinding[] childColumnBindings = new ColumnBinding[childColumns.Count];

			for (int i = 0; i < childColumnBindings.Length; i++)
			{
				childColumnBindings[i] = childTable.GetColumn(childColumns[i]);

				if (childColumnBindings[i] == null)
					throw ExceptionBuilder.ChildColumnNotFound("childColumns", childTable, childColumns[i]);
			}

			return Add(parentColumnBindings, childColumnBindings);
		}