База данных Sterling не сохраняется на Windows phone - PullRequest
3 голосов
/ 23 марта 2012

Я следовал за примерами из нескольких человек.Ни один из них, кажется, не работает для меня.Когда я сохраняю некоторые данные в моей базе данных, все ясно сохраняется с помощью стерлинга (на моем телефоне, а не на эмуляторе) при отладке.Однако, когда я перезапускаю свое приложение, база данных становится пустой.Кто-то еще испытывает ту же проблему.Или у кого-то есть полный рабочий пример.Я знаю, что мои сериализации и сохранения работают ... Пока я не перезапускаю загрузку приложения, мое состояние работает ...

Код в моем app.cs

    public static ISterlingDatabaseInstance Database { get; private set; }
    private static SterlingEngine _engine;
    private static SterlingDefaultLogger _logger;

    private void Application_Launching(object sender, LaunchingEventArgs e)
    {
        ActivateEngine();
    }

    // Code to execute when the application is activated (brought to foreground)
    // This code will not execute when the application is first launched
    private void Application_Activated(object sender, ActivatedEventArgs e)
    {
        ActivateEngine();
    }

    // Code to execute when the application is deactivated (sent to background)
    // This code will not execute when the application is closing
    private void Application_Deactivated(object sender, DeactivatedEventArgs e)
    {
        DeactivateEngine();
    }

    // Code to execute when the application is closing (eg, user hit Back)
    // This code will not execute when the application is deactivated
    private void Application_Closing(object sender, ClosingEventArgs e)
    {
        DeactivateEngine();
    }



    private void ActivateEngine()
    {
        _engine = new SterlingEngine();
        _logger = new SterlingDefaultLogger(SterlingLogLevel.Information);
        _engine.Activate();
        Database = _engine.SterlingDatabase.RegisterDatabase<SokobanDb>();
    }

    private void DeactivateEngine()
    {
        _logger.Detach();
        _engine.Dispose();
        Database = null;
        _engine = null;
    }

Кодmy viewModel

    public void LoadState(int level)
    {
        var levelState = App.Database.Load<LevelState>(level);
        if (levelState != null)
        {
            //TODO: check if game started, then create board from boardstring property else create new board
            //Labyrint = new Labyrint(Factory.CreateBoard());
            NewGame(level);
        }
        else
        {
            NewGame(level);
        }
    }

    public void SaveState()
    {
        var levelState = new LevelState { LevelId = _level, Moves = Labyrint.Moves, Board = Labyrint.ToString() };
        App.Database.Save(levelState);
        App.Database.Flush(); //Required to clean indexes etc.
    }

1 Ответ

4 голосов
/ 23 марта 2012

База данных Sterling по умолчанию использует драйвер в памяти. Чтобы сохранить его, передайте его изолированному драйверу хранилища. В соответствии с руководством по быстрой установке руководства:

https://sites.google.com/site/sterlingdatabase/sterling-user-guide/getting-started

Код выглядит так:

_databaseInstance = _engine.SterlingDatabase.RegisterDatabase (new IsolatedStorageDriver ());

Обратите внимание на экземпляр передаваемого изолированного драйвера хранилища. Это должно сделать это за вас.

Если вы сомневаетесь, взгляните на модульные тесты, поставляемые с источником. Они содержат множество примеров памяти, изолированного хранилища и т. Д., Чтобы показать различные шаблоны для его настройки.

...