public void WriteXmlSchema5()
{
string xmlschema = @"<?xml version=""1.0"" encoding=""utf-16""?>
<xs:schema id=""Example"" xmlns="""" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:msdata=""urn:schemas-microsoft-com:xml-msdata"">
" +
" <xs:element name=\"Example\" msdata:IsDataSet=\"true\" msdata:UseCurrentLocale=\"true\""
+ @">
<xs:complexType>
<xs:choice minOccurs=""0"" maxOccurs=""unbounded"">
<xs:element name=""StandAlone"">
<xs:complexType>
<xs:attribute name=""ID"" type=""xs:int"" use=""required"" />
<xs:attribute name=""Desc"" type=""xs:string"" use=""required"" />
</xs:complexType>
</xs:element>
<xs:element name=""Dimension"">
<xs:complexType>
<xs:attribute name=""Number"" msdata:ReadOnly=""true"" type=""xs:int"" use=""required"" />
<xs:attribute name=""Title"" type=""xs:string"" use=""required"" />
</xs:complexType>
</xs:element>
<xs:element name=""Element"">
<xs:complexType>
<xs:attribute name=""Dimension"" msdata:ReadOnly=""true"" type=""xs:int"" use=""required"" />
<xs:attribute name=""Number"" msdata:ReadOnly=""true"" type=""xs:int"" use=""required"" />
<xs:attribute name=""Title"" type=""xs:string"" use=""required"" />
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
<xs:unique name=""PK_Dimension"" msdata:PrimaryKey=""true"">
<xs:selector xpath="".//Dimension"" />
<xs:field xpath=""@Number"" />
</xs:unique>
<xs:unique name=""PK_Element"" msdata:PrimaryKey=""true"">
<xs:selector xpath="".//Element"" />
<xs:field xpath=""@Dimension"" />
<xs:field xpath=""@Number"" />
</xs:unique>
<xs:keyref name=""FK_Element_To_Dimension"" refer=""PK_Dimension"">
<xs:selector xpath="".//Element"" />
<xs:field xpath=""@Dimension"" />
</xs:keyref>
</xs:element>
</xs:schema>";
DataSet ds = new DataSet("Example");
// Add a DataTable with no ReadOnly columns
DataTable dt1 = new DataTable("StandAlone");
ds.Tables.Add(dt1);
// Add a ReadOnly column
dt1.Columns.Add(new DataColumn("ID", typeof(int), "",
MappingType.Attribute));
dt1.Columns["ID"].AllowDBNull = false;
dt1.Columns.Add(new DataColumn("Desc", typeof
(string), "", MappingType.Attribute));
dt1.Columns["Desc"].AllowDBNull = false;
// Add related DataTables with ReadOnly columns
DataTable dt2 = new DataTable("Dimension");
ds.Tables.Add(dt2);
dt2.Columns.Add(new DataColumn("Number", typeof
(int), "", MappingType.Attribute));
dt2.Columns["Number"].AllowDBNull = false;
dt2.Columns["Number"].ReadOnly = true;
dt2.Columns.Add(new DataColumn("Title", typeof
(string), "", MappingType.Attribute));
dt2.Columns["Title"].AllowDBNull = false;
dt2.Constraints.Add("PK_Dimension", dt2.Columns["Number"], true);
DataTable dt3 = new DataTable("Element");
ds.Tables.Add(dt3);
dt3.Columns.Add(new DataColumn("Dimension", typeof
(int), "", MappingType.Attribute));
dt3.Columns["Dimension"].AllowDBNull = false;
dt3.Columns["Dimension"].ReadOnly = true;
dt3.Columns.Add(new DataColumn("Number", typeof
(int), "", MappingType.Attribute));
dt3.Columns["Number"].AllowDBNull = false;
dt3.Columns["Number"].ReadOnly = true;
dt3.Columns.Add(new DataColumn("Title", typeof
(string), "", MappingType.Attribute));
dt3.Columns["Title"].AllowDBNull = false;
dt3.Constraints.Add("PK_Element", new DataColumn[] {
dt3.Columns ["Dimension"],
dt3.Columns ["Number"] }, true);
ds.Relations.Add("FK_Element_To_Dimension",
dt2.Columns["Number"], dt3.Columns["Dimension"]);
ds.AcceptChanges();
StringWriter sw = new StringWriter();
ds.WriteXmlSchema(sw);
string result = sw.ToString();
Assert.Equal(result.Replace("\r\n", "\n"), xmlschema.Replace("\r\n", "\n"));
}