2012-03-22 3 views
3

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

код в моих 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; 
    } 

код в моем 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. 
    } 
+0

Знаете ли вы, что встроенная база данных существует с Mango? –

+0

Да, я знаю, но мне не нужна реляционная база данных, такая как SQL CE –

ответ

4

База данных Sterling по умолчанию использует драйвер in-memory. Чтобы продолжить, передайте ему изолированный драйвер хранилища. За Документации руководство QuickStart:

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

код выглядит следующим образом:

_databaseInstance = _engine.SterlingDatabase.RegisterDatabase (новый IsolatedStorageDriver());

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

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

+0

Спасибо, Джереми! Я был только в середине написания этого точного вопроса. Забыл посмотреть на модульные тесты - спас бы меня хотя бы на час. :) –

Смежные вопросы