Как преобразовать Typed DataSet Scheme, когда один из типов был изменен? - PullRequest
1 голос
/ 17 сентября 2008

Я получил типизированный (не подключенный) набор данных и множество записей (с двоичной сериализацией), созданных с помощью этого набора данных. Я добавил свойство к одному из типов и хочу преобразовать старые записи в новый набор данных. Я знаю, как их загружать: предоставляя пользовательский связыватель для BinaryFormatter со старой схемой dll. Вопрос в том, как я могу преобразовать объекты старого типа в объекты нового типа - оба типа имеют одинаковое имя, но у нового есть еще одно свойство.

Ответы [ 2 ]

2 голосов
/ 17 сентября 2008

Если единственное различие между существующим набором данных и новым - это добавленное поле, вы можете «обновить» их, записав старые в 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);
}
0 голосов
/ 17 сентября 2008

Можете ли вы сделать так, чтобы новый класс наследовал от старого? Если это так, может быть, вы можете просто десериализовать в новый через кастинг.

Если нет, другим возможным решением является реализация пакетной операции, в которой вы включаете ссылку на старый класс и новый класс в различных пространствах имен, увлажняете старый объект, выполняете глубокое копирование в объект нового класса и сериализуете новый объект.

...