2
var store = new DocumentStore()
{
    Url = @"http://localhost"
};
store.Initialize();


Blog blog = new Blog()
{
    Title = "Hello RavenDB",
    Category = "RavenDB",
    Content = "This is a blog about RavenDB",
    Comments = new BlogComment[]{
        new BlogComment() { Title = "Unrealistic", Content= "This example is unrealistic"},
        new BlogComment() { Title = "Nice", Content= "This example is nice"}
    }
};

using (IDocumentSession session = store.OpenSession())
{
    session.Store(blog);
    session.SaveChanges();
}

上記のコードは、データをデフォルトのデータベースに保存します。(これはWebアプリケーションです。)しかし、Raven Management Studio(Webページ)を作成した別のデータベースにデータを保存したいと思います。データベース名はどこで指定しますか?また、接続文字列をデータベース名とともに構成ファイルに保存する方法を教えてください。これは私がデータベース名なしで設定ファイルにそれを保存する方法です

<connectionStrings>
  <add name="Local" connectionString="DataDir = ~\Data"/>
  <add name="Server" connectionString="Url = http://localhost:8080"/>
</connectionStrings>
4

3 に答える 3

3

すべての質問はドキュメントで説明されています:

new DocumentStore 
{
    ConnectionStringName = "Local"
}
<connectionStrings>
    <add name="Local" connectionString="DataDir=~\Data;Database=MyDatabaseName"/>
    <add name="Server" connectionString="Url=http://localhost:8080;Database=MyDatabaseName"/>
 </connectionStrings>
于 2012-11-07T21:58:11.837 に答える
2

他の答えは問題ありませんが、効率を上げるために、アプリケーションにDocumentStoreのインスタンスが1つだけ必要です。ただし、複数のRavenサーバーを実行している場合は、サーバーごとに1つでもかまいません。

同じサーバー上の異なるデータベースに接続するだけの場合は、次を使用する必要があります。

var store = new DocumentStore(...your connection string or inline options...);

using (var session = store.OpenSession("the database name")
{
    ...
}
于 2012-11-08T00:21:33.353 に答える
1

表示したとおりに接続文字列データを保持できます。最後にデータベース名を付けるのが最適です。

<connectionStrings>
  <add name="Core" connectionString="Url=http://localhost:8082/databases/Core"
    providerName="My primary database." />
  <add name="Backup" connectionString="Url=http://localhost:8082/databases/Backup"
    providerName="My backup stuff." />
</connectionStrings>

次に、定義されたソースのすべてのハンドラーを保持するシングルトンクラスを実装できます。次に例を示します。

public class DocumentStoreProvider : IDocumentStoreProvider
{
    private static readonly IDictionary<string, IDocumentStore> _documentStores = new Dictionary<string, IDocumentStore>();    
    private static readonly DocumentStoreProvider _instance = new DocumentStoreProvider();

    private DocumentStoreProvider()
    {
        var connectionStrings = ConfigurationManager.ConnectionStrings;
        foreach (ConnectionStringSettings connectionString in connectionStrings)
        {
            var name = connectionString.Name;
            var connection = connectionString.ConnectionString;

            IDocumentStore currentStore = new DocumentStore { ConnectionStringName = name };
            currentStore.Initialize();
            currentStore.DatabaseCommands.EnsureDatabaseExists(name);
            IndexCreation.CreateIndexes(Assembly.Load("Your.Assembly.Containing.Indexes"), currentStore);

            _documentStores.Add(name, currentStore);
        }
    }

    public static DocumentStoreProvider Instance
    {
        get { return _instance; }
    }

    public IDocumentStore GetDocumentStore(string key)
    {
        return _documentStores[key];
    }
}

使用法は次のとおりです。

using (var session = DocumentStoreProvider.Instance.GetDocumentStore("Backup").OpenSession())
{
    /* do stuff for chosen database... */
    session.Store(something);
    session.SaveChanges();
}
于 2012-11-07T22:04:59.380 に答える