如果FS已初始化,我可以通过MVC应用程序中的FileStore
实例连接到RavenDBServer
,所以(例如),我创建RavenDBServer
DataDirectory
设置:
要明确:这是作为嵌入式实例运行的。
var config = new RavenConfiguration
{
DataDirectory = "~\\App_Data\\Database",
DatabaseName = "test"
};
var server = new RavenDbServer(config);
server.UseEmbeddedHttpServer = true;
然后转到Raven UI,添加名为test-fs
的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)应用程序中执行此操作。
答案 0 :(得分:2)
在RavenDB邮件列表中查看此thread。
你可以这样做:
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();
下一个版本应该支持内存文件存储。
答案 1 :(得分:0)
我使用静态FileStoreHolder来提供文件存储。正如文档商店推荐的那样。
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);
}