2

FileStore如果 FS 已初始化,我可以通过我的 MVC 应用程序中的实例连接到一个RavenDBServer,因此(例如),我RavenDBServer使用该DataDirectory集合创建一个:

需要明确的是:这是作为嵌入式实例运行的。

var config = new RavenConfiguration
{
    DataDirectory = "~\\App_Data\\Database",
    DatabaseName = "test"
};

var server = new RavenDbServer(config);
server.UseEmbeddedHttpServer = true;

然后进入 Raven UI,添加一个名为 的 FS test-fs,在初始化代码中添加如下内容:

server.FilesStore.DefaultFileSystem = "test-fs";
server.FilesStore.Initialize();

然后当我打电话时:

server.FileStore.OpenAsyncSession("test-fs");

我们都很好。

理想情况下,我不想这样做,因为它很麻烦,并且涉及更改代码。所以。我把这个放在:

server.FilesStore.AsyncFilesCommands.Admin.CreateOrUpdateFileSystemAsync(new FileSystemDocument(), "test-fs");

但这永远不会在FileSystems文件夹中创建文件App_Data夹,并且任何尝试OpenAsyncSession总是会导致错误,指出test-fs无法打开。

如何在初始化时创建 FS?我在 MVC (5.2) 应用程序中执行此操作。

4

2 回答 2

2

请参阅RavenDB 邮件列表上的此线程。

你可以这样做:

var store = new EmbeddableDocumentStore {
    RunInMemory = true,
    EnlistInDistributedTransactions = false
};
store.Initialize();
RavenServer = store;

var createFs = Task.Run(async () => {
    await store.FilesStore.AsyncFilesCommands.Admin.CreateOrUpdateFileSystemAsync(
    new FileSystemDocument {
        Settings = {
            { "Raven/FileSystem/DataDir", "~/App_Data/FileSystem/default" }
        }
    },
    "default"
    ).ConfigureAwait(false);
});
createFs.Wait();

下一个版本应该支持内存文件存储。

于 2015-01-05T10:24:22.270 回答
0

我使用静态 FileStoreHolder 来提供 FilesStore。正如 DocumentStore 所推荐的那样。

 internal class FilesStoreHolder
{
    private static readonly Lazy<IFilesStore> Store = new Lazy<IFilesStore>(CreateStore);
    public static IFilesStore FilesStore
    {
        get { return Store.Value; }
    }

    private static IFilesStore CreateStore()
    {
        var store = new FilesStore
        {
          ConnectionStringName = "ConnStr",
          DefaultFileSystem = "MyFS"
        }.Initialize();

        return store;
    }
}

然后当我需要 FS 会话时,我会这样:

 using (var fsSession = FilesStoreHolder.FilesStore.OpenAsyncSession())
        {
            return await fsSession.DownloadAsync(Folder + name);
        }
于 2014-12-07T21:25:52.737 回答