private void AddUniqueConstraints (UniqueConstraint uniq,
ArrayList names)
{
// if column of the constraint is hidden do not write the constraint.
foreach (DataColumn column in uniq.Columns)
if (column.ColumnMapping == MappingType.Hidden)
return; // do nothing
w.WriteStartElement ("xs", "unique", xmlnsxs);
// if constaraint name do not exist in the hashtable we can use it.
string name;
if (!names.Contains (uniq.ConstraintName)) {
name = XmlHelper.Encode (uniq.ConstraintName);
w.WriteAttributeString ("name", name);
}
// otherwise generate new constraint name for the
// XmlSchemaUnique element.
else {
name = XmlHelper.Encode (uniq.Table.TableName) + "_" + XmlHelper.Encode (uniq.ConstraintName);
w.WriteAttributeString ("name", name);
w.WriteAttributeString (
XmlConstants.MsdataPrefix,
XmlConstants.ConstraintName,
XmlConstants.MsdataNamespace,
XmlHelper.Encode (uniq.ConstraintName));
}
names.Add (name);
if (uniq.IsPrimaryKey) {
w.WriteAttributeString (
XmlConstants.MsdataPrefix,
XmlConstants.PrimaryKey,
XmlConstants.MsdataNamespace,
"true");
}
AddExtendedPropertyAttributes (uniq.ExtendedProperties);
w.WriteStartElement ("xs", "selector",
xmlnsxs);
w.WriteAttributeString ("xpath", ".//" +
ConstraintPrefix + XmlHelper.Encode (uniq.Table.TableName));
w.WriteEndElement (); // selector
foreach (DataColumn c in uniq.Columns) {
w.WriteStartElement ("xs", "field",
xmlnsxs);
w.WriteStartAttribute ("xpath", String.Empty);
if (c.ColumnMapping == MappingType.Attribute)
w.WriteString ("@");
w.WriteString (ConstraintPrefix);
w.WriteString (XmlHelper.Encode (c.ColumnName));
w.WriteEndAttribute (); // xpath
w.WriteEndElement (); // field
}
w.WriteEndElement (); // unique
}