2012-03-22 5 views
3

私はいくつかの人からの純粋なデータベースの例を続けました。どちらも私のために動かないようです。私がデータベースにいくつかのものを残しておくと、デバッグ時にすべてが明瞭に(私の電話機で、エミュレータではなく)使用されて永続化されます。しかし、私のアプリケーションを再起動すると、データベースは空になります。他の誰かが同じ問題を経験していますか?あるいは、誰かが完全な実例を持っていますか?私は私のapp.csでスターリングデータベースがWindows電話に残らない

コード

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

マンゴー以降、組み込みのデータベースが存在することはご存知ですか? –

+0

はい、私は認識していますが、SQL CEのようなリレーショナルデータベースは必要ありません –

答えて

4

デフォルトのスターリングデータベースでは、メモリ内ドライバが使用されます。永続化するには、隔離されたストレージドライバを渡します。ドキュメントガイド、クイックスタートあたり:

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

コードは次のようになります。

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

孤立したストレージドライバのインスタンスが渡されていることに注意してください。

不明な点がある場合は、ソースに付属している単体テストをご覧ください。それらには、数多くのメモリの例、隔離されたストレージなどがあり、それを設定するためのさまざまなパターンを示しています。

+0

ありがとう、Jeremy!私はちょうどこの正確な質問を書く途中でした。単体テストを見るのを忘れていたら、少なくとも1時間は節約できたでしょう。 :) –

関連する問題