internal override Constraint Clone(DataSet destination, bool ignorNSforTableLookup)
{
int iDest;
if (ignorNSforTableLookup)
{
iDest = destination.Tables.IndexOf(Table.TableName);
}
else
{
iDest = destination.Tables.IndexOf(Table.TableName, Table.Namespace, false); // pass false for last param
// to be backward compatable, otherwise meay cause new exception
}
if (iDest < 0)
{
return null;
}
DataTable table = destination.Tables[iDest];
if (ignorNSforTableLookup)
{
iDest = destination.Tables.IndexOf(RelatedTable.TableName);
}
else
{
iDest = destination.Tables.IndexOf(RelatedTable.TableName, RelatedTable.Namespace, false);// pass false for last param
}
if (iDest < 0)
{
return null;
}
DataTable relatedTable = destination.Tables[iDest];
int keys = Columns.Length;
DataColumn[] columns = new DataColumn[keys];
DataColumn[] relatedColumns = new DataColumn[keys];
for (int i = 0; i < keys; i++)
{
DataColumn src = Columns[i];
iDest = table.Columns.IndexOf(src.ColumnName);
if (iDest < 0)
{
return null;
}
columns[i] = table.Columns[iDest];
src = RelatedColumnsReference[i];
iDest = relatedTable.Columns.IndexOf(src.ColumnName);
if (iDest < 0)
{
return null;
}
relatedColumns[i] = relatedTable.Columns[iDest];
}
ForeignKeyConstraint clone = new ForeignKeyConstraint(ConstraintName, relatedColumns, columns);
clone.UpdateRule = UpdateRule;
clone.DeleteRule = DeleteRule;
clone.AcceptRejectRule = AcceptRejectRule;
// ...Extended Properties
foreach (object key in ExtendedProperties.Keys)
{
clone.ExtendedProperties[key] = ExtendedProperties[key];
}
return clone;
}