2012-02-07 5 views
7

RavenDbを埋め込みました。私の合流テストの一部として、私はオブジェクトが維持されていることを確認したい。私は、オブジェクトにSaveChangesを取得し、それを取得するとき、私は私の接続を処分しない限り見つけることができません。RavenDBどのようにフラッシュする?

これは、どのファイルが

using (var session = _dataDocumentStore.Instance.OpenSession()) 
{ 
     session.Store(file); 
     session.SaveChanges(); 
} 

を返されないように、私のために動作しません....

using (var session = _dataDocumentStore.Instance.OpenSession()) 
{ 
      return session.Query<File>().ToList(); 
} 

私が働くEmbeddableDocumentStoreを配置し、再作成Flushメソッドを作成しますが、としてこれは基本的なものであると感じているものです。私は物事について間違った方法をとっているかもしれません:

public static IDocumentStore Initialize() 
     { 
      instance = new EmbeddableDocumentStore 
      { 
       DataDirectory = "App_Data/Database", 
       UseEmbeddedHttpServer = true, 


      }; 

      instance.Initialize(); 
      return instance; 
     } 

     public void Flush() 
     { 
      instance.Dispose(); 
      Initialize(); 

     } 

HあなたはRavenDBに残っていて、それが永続化されていることを確認しますか?これについてのアドバイスは素晴らしいでしょう

+0

あなたがinstance.Initialize()を呼び出している理由があります。 IDocumentStore Initialize()メソッドに入ったときに新しいインスタンスを作成しようとしています – MethodMan

+0

データベース自体には何が表示されますか? Raven Studioをチェックして、保存が正常に行われていることを確認してください。あなたの文書はそこにありますか? –

答えて

15

は基本的には、EmbeddableDocumentStoreは保存してインデックス新しいデータ、保存、照会よりも時間が長くなります。だから、

あなたのテストは言う: -

  1. ストアとのSaveChanges。
  2. ロード。
  3. この負荷がかかりましたか?

インデックス作成が完了するまでに完了した時間よりも早くロードが完了します。

だから、Daniel Langのように、古い結果が出るのを待つ必要があります。

しかし、コード内で確認したい-every-クエリのために行う必要があります。だから..(法的に)不正行為をすることができます:)

何かがストアに問い合わせると、失礼な結果を待つようにドキュメントストアに伝えてください。

どのようにですか?

// Initialise the Store. 
var documentStore = new EmbeddableDocumentStore 
        { 
         RunInMemory = true 
        }; 
documentStore.Initialize(); 

// Force query's to wait for index's to catch up. Unit Testing only :P 
documentStore.RegisterListener(new NoStaleQueriesListener()); 

.... 


#region Nested type: NoStaleQueriesListener 

public class NoStaleQueriesListener : IDocumentQueryListener 
{ 
    #region Implementation of IDocumentQueryListener 

    public void BeforeQueryExecuted(IDocumentQueryCustomization queryCustomization) 
    { 
     queryCustomization.WaitForNonStaleResults(); 
    } 

    #endregion 
} 

#endregion 

これを実際に見るには、RavenOverflow @ githubをご覧ください。そして、その溶液中のTests projectあなたが望むかもしれないすべての愛を持っている:)

enter image description here

+0

++。バージョン3の場合: 'documentStore.Listeners.RegisterListener' –

12

理由は、レイヴンのインデックスがここで何かを返すには古すぎるということです。あなたはこの実行する必要があります。さらに読書のために

session.Query<File>() 
    .Customize(x => x.WaitForNonStaleResultsAsOfLastWrite()) 
    .ToList(); 

を、ここに行く:http://ravendb.net/docs/client-api/querying/stale-indexes

関連する問題