public void Merge_ByDataRowsPreserveMissingSchema()
{
DataTable dt = DataProvider.CreateParentDataTable();
dt.TableName = "Table1";
dt.PrimaryKey = new DataColumn[] { dt.Columns[0] };
//create target dataset (copy of source dataset)
DataSet dsTarget = new DataSet();
dsTarget.Tables.Add(dt.Copy());
//add new column (for checking MissingSchemaAction)
DataColumn dc = new DataColumn("NewColumn", typeof(float));
dt.Columns.Add(dc);
DataRow[] drArr = new DataRow[3];
//Update row
string OldValue = dt.Select("ParentId=1")[0][1].ToString();
drArr[0] = dt.Select("ParentId=1")[0];
drArr[0][1] = "NewValue";
//delete rows
drArr[1] = dt.Select("ParentId=2")[0];
drArr[1].Delete();
//add row
drArr[2] = dt.NewRow();
drArr[2].ItemArray = new object[] { 99, "NewRowValue1", "NewRowValue2", null };
dt.Rows.Add(drArr[2]);
DataSet dsTarget1 = null;
#region "Merge(drArr,true,MissingSchemaAction.Ignore )"
dsTarget1 = dsTarget.Copy();
dsTarget1.Merge(drArr, true, MissingSchemaAction.Ignore);
// Merge true,Ignore - Column
Assert.Equal(false, dsTarget1.Tables["Table1"].Columns.Contains("NewColumn"));
// Merge true,Ignore - changed values
Assert.Equal(OldValue, dsTarget1.Tables["Table1"].Select("ParentId=1")[0][1]);
// Merge true,Ignore - added values
Assert.Equal(1, dsTarget1.Tables["Table1"].Select("ParentId=99").Length);
// Merge true,Ignore - deleted row
Assert.Equal(true, dsTarget1.Tables["Table1"].Select("ParentId=2").Length > 0);
#endregion
#region "Merge(drArr,false,MissingSchemaAction.Ignore )"
dsTarget1 = dsTarget.Copy();
dsTarget1.Merge(drArr, false, MissingSchemaAction.Ignore);
// Merge true,Ignore - Column
Assert.Equal(false, dsTarget1.Tables["Table1"].Columns.Contains("NewColumn"));
// Merge true,Ignore - changed values
Assert.Equal("NewValue", dsTarget1.Tables["Table1"].Select("ParentId=1")[0][1]);
// Merge true,Ignore - added values
Assert.Equal(1, dsTarget1.Tables["Table1"].Select("ParentId=99").Length);
// Merge true,Ignore - deleted row
Assert.Equal(0, dsTarget1.Tables["Table1"].Select("ParentId=2").Length);
#endregion
#region "Merge(drArr,true,MissingSchemaAction.Add )"
dsTarget1 = dsTarget.Copy();
dsTarget1.Merge(drArr, true, MissingSchemaAction.Add);
// Merge true,Ignore - Column
Assert.Equal(true, dsTarget1.Tables["Table1"].Columns.Contains("NewColumn"));
// Merge true,Ignore - changed values
Assert.Equal(OldValue, dsTarget1.Tables["Table1"].Select("ParentId=1")[0][1]);
// Merge true,Ignore - added values
Assert.Equal(1, dsTarget1.Tables["Table1"].Select("ParentId=99").Length);
// Merge true,Ignore - deleted row
Assert.Equal(true, dsTarget1.Tables["Table1"].Select("ParentId=2").Length > 0);
#endregion
#region "Merge(drArr,false,MissingSchemaAction.Add )"
dsTarget1 = dsTarget.Copy();
dsTarget1.Merge(drArr, false, MissingSchemaAction.Add);
// Merge true,Ignore - Column
Assert.Equal(true, dsTarget1.Tables["Table1"].Columns.Contains("NewColumn"));
// Merge true,Ignore - changed values
Assert.Equal("NewValue", dsTarget1.Tables["Table1"].Select("ParentId=1")[0][1]);
// Merge true,Ignore - added values
Assert.Equal(1, dsTarget1.Tables["Table1"].Select("ParentId=99").Length);
// Merge true,Ignore - deleted row
Assert.Equal(0, dsTarget1.Tables["Table1"].Select("ParentId=2").Length);
#endregion
}