Предварительно загруженная база данных в приложении Windows Phone 7.5 Mango - PullRequest
2 голосов
/ 13 октября 2011

Я создаю приложение в visual studio для Windows Phone Mango, в котором мне нужна словарная база данных. Я знаю, как его создать, как вставить, обновить и удалить.

У меня есть файл данных размером 300 КБ, который я хочу предварительно загрузить в эту базу данных (проанализировать и вставить - это не проблема) в приложение. Проблема в том, что я не хочу делать это во время установки приложения. Я хочу, чтобы файл базы данных был предустановлен в изолированном хранилище данных. Мне также нужна эта система на борту, потому что содержимое XML может меняться каждые 3 месяца. Но обработка файла 300k xml на телефоне - каждый раз, когда приложение установлено - звучит довольно ... глупо, когда я могу сделать предустановленную базу данных ...

PS. Есть ли в linq достойные помощники по XML? Для кэширования XML-файлов, например ..

1 Ответ

6 голосов
/ 13 октября 2011

Это не относится к вашей ситуации с помощниками XML для Linq, но хороший способ справиться с этим - создать базу данных отдельно (как в проекте консольного приложения) и загрузить ее с необходимыми вам данными. Затем скопируйте файл SDF в проект Windows Phone в качестве содержимого. Наконец, при развертывании приложения скопируйте базу данных из места развертывания в изолированное хранилище. Таким образом, вам не нужно иметь дело с файлами XML или чем-то подобным. Это просто скопировать из места развертывания в изолированное хранилище. Я работаю над (довольно длинным) постом в блоге, в котором все об этом говорится, но основной код, который вам нужен, это:

// Obtain the virtual store for the application.
IsolatedStorageFile iso = IsolatedStorageFile.GetUserStoreForApplication();

// Create a stream for the file in the installation folder.
using (Stream input = Application.GetResourceStream(new Uri("ReferenceDB.sdf", UriKind.Relative)).Stream)
{
    // Create a stream for the new file in isolated storage.
    using (IsolatedStorageFileStream output = iso.CreateFile("ApplicationDB.sdf"))
    {
        // Initialize the buffer.
        byte[] readBuffer = new byte[4096];
        int bytesRead = -1;

        // Copy the file from the installation folder to isolated storage.
        while ((bytesRead = input.Read(readBuffer, 0, readBuffer.Length)) > 0)
        {
            output.Write(readBuffer, 0, bytesRead);
        }
    }
}

Затем вы можете подключиться к базе данных в обычном режиме и читать / записывать данные в течение всего дня:

var db = new MyDataContext("Data Source = 'isostore:/ApplicationDB.sdf';");

Вы можете загрузить пример кода из моего репозитория GitHub по адресу https://github.com/ChrisKoenig/ReferenceDatabase

-Крис

...