1

Мой сценарий таков:Как ссылаться на инициализированный встроенный экземпляр RavenDB в библиотеке классов?

У меня есть пользовательский RavenDB membership provider, который реализован в библиотеке классов (DLL). Этот провайдер должен получить доступ к базе данных для хранения и получения информации о пользователе и ролях. Я хотел бы использовать одну и ту же базу данных приложений для хранения информации о членстве, чтобы не иметь еще одну базу данных.

Я не знаю, как получить ссылку на уже инициализированную базу данных (базу данных приложения) внутри кода библиотеки классов. Я думаю, что я иду неправильно здесь ... :)

Некоторый код:

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" /> 

Как я могу повторно использовать одну и ту же базу данных в пользовательском поставщике членства? Есть идеи?

Я думал о перемещении файлов кода библиотеки классов в веб-проект. Таким образом, я мог бы легко получить ссылку на DocumentStore, но код не был бы таким организованным, как хотелось бы.

Я также попытался использовать 2 базы данных RavenDB: 1 для приложения и 1 для поставщика членства, но поскольку я запускаю RavenDB в своем встраиваемом моду, я не мог заставить его работать.

Эти ошибки, которые я получил во время моих попыток до сих пор:

RavenDB Could not open transactional storage. 

Temp path already used by another database instance. 

ответ

1

Вы должны передать экземпляр открытого документа магазина к DLL. Вы можете сделать это с помощью контейнера или путем предоставления вызова API для этого. У вас не может быть двух экземпляров, использующих один и тот же бит.

+1

Святой Иисус ... Я не хотел идти в контейнер, так как это было бы слишком много для того, что мне нужно. После вашего ответа включился свет, и я пошел по API-интерфейсу. Я сделал то, что описано здесь: https://github.com/csainty/Glimpse.RavenDb/wiki/How-to-use Теперь я использую это после инициализации экземпляра приложения RavenDB: 'RavenDBMembership.Provider.RavenDBMembershipProvider.AttachTo (_documentStore); ' –

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