当其中一个类型被更改时,如何转换Typed DataSet Scheme?

时间:2008-09-17 07:21:38

标签: c# ado.net dataset

我有一个打字(未连接)的数据集,以及使用此数据集创建的许多记录(二进制seriliazed)。 我已经为其中一种类型添加了一个属性,并且我希望使用新数据集转换旧记录。 我知道如何加载它们:使用旧架构dll为BinaryFormatter提供自定义绑定器。 问题是我如何将旧类型的对象转换为新类型的对象 - 两种类型具有相同的名称,但新类型具有一个属性。

2 个答案:

答案 0 :(得分:2)

如果现有数据集与新数据集之间的唯一区别是添加的字段,那么您可以通过将旧的数据库写入XML然后将其读入新的数据库来“升级”它们。添加字段的值将为DBNull。

MyDataSet myDS = new MyDataSet();
MyDataSet.MyTableRow row1 = myDS.MyTable.NewMyTableRow();
row1.Name = "Brownie";
myDS.MyTable.Rows.Add(row1);

MyNewDataSet myNewDS = new MyNewDataSet();

using(MemoryStream ms = new MemoryStream()){
    myDS.WriteXml(ms);
    ms.Position = 0;
    myNewDS.ReadXml(ms);
}

答案 1 :(得分:0)

你可以让新类继承旧类吗?如果是这样,也许您可​​以通过强制转换简单地反序列化为新的。

如果没有,另一种可能的解决方案是实现批处理操作,其中包括对旧类的引用和不同命名空间中的新类,水合旧对象,对新类的对象执行深层复制,以及序列化新对象。