1

私のシナリオは次のとおりです。初期化された埋め込みRavenDBインスタンスをクラスライブラリで参照する方法は?

私はクラスライブラリ(DLL)で実装されているカスタムRavenDB membership providerを持っています。このプロバイダーは、ユーザーおよび役割の情報を保管および検索するためにデータベースにアクセスする必要があります。私は同じアプリケーションデータベースを使用してメンバーシップ情報を保存して、もう1つのデータベースがないようにしたいと思います。

私は、クラスライブラリのコード内の既に初期化されたデータベース(appデータベース)への参照を取得する方法を知りません。

bool embeddedStore = Convert.ToBoolean(config["enableEmbeddableDocumentStore"]); 

if (embeddedStore) 
{ 
    _documentStore = new EmbeddableDocumentStore() 
    { 
     // Here I'm using the same connection string used by the app. 
     // This gives me an error when I try to open a session in the DocumentStore. 
     ConnectionStringName = 
      config["connectionStringName"] 
    }; 
} 
else 
{ 
    _documentStore = new DocumentStore() 
    { 
     ConnectionStringName = 
      config["connectionStringName"] 
    }; 
} 

これは、Web.configファイルに存在する接続文字列です::

<add name="RavenDB" connectionString="DataDir = ~\App_Data\Database" /> 

どのようにすることができ、私は私が...ここに:)

いくつかのコードを間違った道を進んでいると思いますカスタムメンバーシッププロバイダ内で同じデータベースを再利用しますか?何か案は?

私はクラスライブラリのコードファイルをWebプロジェクトに移動することを考えました。このようにしてDocumentStoreへの参照を簡単に得ることができましたが、コードは私が望むほど組織的ではありません。

2つのRavenDBデータベースを使用しようとしました.1つはアプリケーション用、もう1つはメンバーシッププロバイダ用ですが、埋め込み可能な方法でRavenDBを実行しているので、動作させることができませんでした。

RavenDB Could not open transactional storage. 

Temp path already used by another database instance. 

答えて

1

あなたのDLLに開いたドキュメントストアのインスタンスを渡す必要があります。

これらは私がこれまでのところ、私の試みの間に得たエラーです。 これを行うには、コンテナを使用するか、それを行うAPI呼び出しを提供します。 同じdbを使用する2つのインスタンスを持つことはできません。

+1

聖なるイエス···私が必要とするものはあまりにも多いので、私はコンテナの道に行きたくありませんでした。あなたの答えの後、ライトが点灯し、私はAPI呼び出しの方法を行った。私はここに記述されていることをしました:https://github.com/csainty/Glimpse.RavenDb/wiki/How-to-use今私はこれをRavenDBアプリケーションのインスタンスを初期化した後に使います: 'RavenDBMembership.Provider.RavenDBMembershipProvider.AttachTo(_documentStore ); ' –

関連する問題