public void WriteXmlSchema_Relations_ForeignKeys()
{
MemoryStream ms1 = null;
MemoryStream ms2 = null;
MemoryStream msA = null;
MemoryStream msB = null;
DataSet ds1 = new DataSet();
DataTable table1 = ds1.Tables.Add("Table 1");
DataTable table2 = ds1.Tables.Add("Table 2");
DataColumn col1_1 = table1.Columns.Add("col 1", typeof(int));
DataColumn col1_2 = table1.Columns.Add("col 2", typeof(int));
DataColumn col1_3 = table1.Columns.Add("col 3", typeof(int));
DataColumn col1_4 = table1.Columns.Add("col 4", typeof(int));
DataColumn col1_5 = table1.Columns.Add("col 5", typeof(int));
DataColumn col1_6 = table1.Columns.Add("col 6", typeof(int));
DataColumn col1_7 = table1.Columns.Add("col 7", typeof(int));
DataColumn col2_1 = table2.Columns.Add("col 1", typeof(int));
DataColumn col2_2 = table2.Columns.Add("col 2", typeof(int));
DataColumn col2_3 = table2.Columns.Add("col 3", typeof(int));
DataColumn col2_4 = table2.Columns.Add("col 4", typeof(int));
DataColumn col2_5 = table2.Columns.Add("col 5", typeof(int));
DataColumn col2_6 = table2.Columns.Add("col 6", typeof(int));
DataColumn col2_7 = table2.Columns.Add("col 7", typeof(int));
ds1.Relations.Add("rel 1",
new DataColumn[] { col1_1, col1_2 },
new DataColumn[] { col2_1, col2_2 },
false);
ds1.Relations.Add("rel 2",
new DataColumn[] { col1_3, col1_4 },
new DataColumn[] { col2_3, col2_4 },
true);
table2.Constraints.Add("fk 1",
new DataColumn[] { col1_5, col1_6 },
new DataColumn[] { col2_5, col2_6 });
table1.Constraints.Add("fk 2",
new DataColumn[] { col2_5, col2_6 },
new DataColumn[] { col1_5, col1_6 });
table1.Constraints.Add("pk 1", col1_7, true);
table2.Constraints.Add("pk 2", col2_7, true);
ms1 = new MemoryStream();
ds1.Tables[0].WriteXmlSchema(ms1);
ms2 = new MemoryStream();
ds1.Tables[1].WriteXmlSchema(ms2);
msA = new MemoryStream(ms1.GetBuffer());
DataTable dtA = new DataTable();
dtA.ReadXmlSchema(msA);
msB = new MemoryStream(ms2.GetBuffer());
DataTable dtB = new DataTable();
dtB.ReadXmlSchema(msB);
Assert.Equal(3, dtA.Constraints.Count);
Assert.Equal(2, dtB.Constraints.Count);
Assert.True(dtA.Constraints.Contains("pk 1"));
Assert.True(dtA.Constraints.Contains("Constraint1"));
Assert.True(dtA.Constraints.Contains("Constraint2"));
Assert.True(dtB.Constraints.Contains("pk 2"));
Assert.True(dtB.Constraints.Contains("Constraint1"));
}