internal ForeignKeyConstraint Clone(DataTable destination)
{
Debug.Assert(Table == RelatedTable, "We call this clone just if we have the same datatable as parent and child ");
int keys = Columns.Length;
DataColumn[] columns = new DataColumn[keys];
DataColumn[] relatedColumns = new DataColumn[keys];
int iDest = 0;
for (int i = 0; i < keys; i++)
{
DataColumn src = Columns[i];
iDest = destination.Columns.IndexOf(src.ColumnName);
if (iDest < 0)
{
return null;
}
columns[i] = destination.Columns[iDest];
src = RelatedColumnsReference[i];
iDest = destination.Columns.IndexOf(src.ColumnName);
if (iDest < 0)
{
return null;
}
relatedColumns[i] = destination.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;
}