首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在嵌入MVC时以编程方式初始化RavenFS FileStore

如何在嵌入MVC时以编程方式初始化RavenFS FileStore
EN

Stack Overflow用户
提问于 2014-10-17 14:55:58
回答 2查看 1.2K关注 0票数 2

我可以通过MVC应用程序中的FileStore实例连接到RavenDBServer,前提是初始化了FS,因此(例如)我用DataDirectory集创建了一个RavenDBServer

要清楚:--这是作为一个嵌入式实例运行的。

代码语言:javascript
复制
var config = new RavenConfiguration
{
    DataDirectory = "~\\App_Data\\Database",
    DatabaseName = "test"
};

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

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

代码语言:javascript
复制
server.FilesStore.DefaultFileSystem = "test-fs";
server.FilesStore.Initialize();

然后当我打电话:

代码语言:javascript
复制
server.FileStore.OpenAsyncSession("test-fs");

我们都很好。

理想情况下,我不想继续这样做,因为这很麻烦,而且涉及到更改代码。所以。我把这个放进去:

代码语言:javascript
复制
server.FilesStore.AsyncFilesCommands.Admin.CreateOrUpdateFileSystemAsync(new FileSystemDocument(), "test-fs");

但这不会在FileSystems文件夹中创建App_Data文件夹,任何对OpenAsyncSession的尝试都会导致错误,说明无法打开test-fs

如何在初始化时创建FS?我是在MVC (5.2)应用程序中这样做的。

EN

回答 2

Stack Overflow用户

发布于 2015-01-05 10:24:22

线程邮件列表中看到这个RavenDB。

你可以这样做:

代码语言:javascript
复制
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();

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

票数 2
EN

Stack Overflow用户

发布于 2014-12-07 21:25:52

我使用静态FileStoreHolder来提供FilesStore。作为DocumentStore的推荐。

代码语言:javascript
复制
 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会话时,我就这样得到了它:

代码语言:javascript
复制
 using (var fsSession = FilesStoreHolder.FilesStore.OpenAsyncSession())
        {
            return await fsSession.DownloadAsync(Folder + name);
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26427765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档