Мы преобразуем наше приложение из Sql Server Express (назовем эту версию 3) в Sql Server Compact Edition (назовем эту версию 4). Я пытаюсь убедиться, что обновления с предыдущих версий (версии 1 и 2) в новом продукте (версия 4) совпадают со старыми (версия 3). Код обновления пришлось переписать по разным причинам.
Я создаю приложение для быстрого тестирования, которое будет сравнивать базу данных Sql Server Express версии 3 и базу данных Sql CE версии 4. Если логика преобразования хороша, базы данных должны быть точно такими же - те же таблицы, те же столбцы, те же значения строк.
Мне кажется, что должен быть простой способ сделать это, используя DataTable.Merge
и DataTable.GetChanges
, но я не добился успеха. Если строки существуют в базе данных версии 3, а не в базе данных версии 4, GetChanges
по-прежнему возвращает ноль. Если есть изменения в тех же строках (на основе первичного ключа, который является Guid), GetChanges
по-прежнему возвращает ноль.
string selectSql = String.Format("SELECT {0} FROM {1}", String.Join(", ", columns.ToArray()), tableName);
var expressAdapter = new SqlDataAdapter(selectSql, expressConnection);
DataTable expressTable = new DataTable();
expressAdapter.Fill(expressTable);
expressTable.PrimaryKey = new DataColumn[] { expressTable.Columns[tableName + "ID"] };
SqlCeConnection ceConnection = new SqlCeConnection(this.SqlServerCeConnectionString);
var ceAdapter = new SqlCeDataAdapter(selectSql, ceConnection);
DataTable ceTable = expressTable.Clone();
ceAdapter.Fill(ceTable);
expressTable.Merge(ceTable);
return expressTable.GetChanges(); // this is null even when the expressTable has rows that do not exist in ceTable.
Использую ли я Merge
и GetChanges
слишком далеко от их предполагаемого использования? Если это так, другие варианты будут приветствоваться.