C# 如何从数据库加载一些视图,从MVC4中的文件加载其他视图

C# 如何从数据库加载一些视图,从MVC4中的文件加载其他视图,c#,asp.net-mvc-4,virtualpathprovider,C#,Asp.net Mvc 4,Virtualpathprovider,我有一个web应用程序可以从文件中加载_布局和正常页面视图,现在我尝试使用VirtualPathProvider和重写的VirtualFile从数据库中加载部分视图: public class RavenDbPathProvider : VirtualPathProvider { public override bool FileExists(string virtualPath) { if (!virtualPath.StartsWith("TextContents/

我有一个web应用程序可以从文件中加载_布局和正常页面视图,现在我尝试使用VirtualPathProvider和重写的VirtualFile从数据库中加载部分视图:

public class RavenDbPathProvider : VirtualPathProvider {

    public override bool FileExists(string virtualPath) {
        if (!virtualPath.StartsWith("TextContents/")) return false;

        using (var session = ObjectFactory.GetInstance<IDocumentSession>()) {
            return session.Query<TextContent>().Any(w => w.Id == virtualPath);
        }
    }

    public override VirtualFile GetFile(string virtualPath) {
        if (!virtualPath.StartsWith("TextContents/")) 
            return base.GetFile(virtualPath);
        return new RavenDbVirtualFile(virtualPath);
    }
}
然而,当我注册RavendBathProvider时,它似乎被用于所有视图查找

是否可以注册多个VirtualPathProviders,以便在磁盘上找不到视图时,在数据库中继续搜索


如果没有,是否有人成功地完成了类似的操作?

是否希望
FileExists
方法也调用(并返回)基
FileExists
,如果它不在
TextContents
中?是的,这是正确的。我改为返回基本实现,并进一步进行了几步。我还需要修改虚拟路径以实际查找视图,但之后我就回家了。谢谢
HostingEnvironment.RegisterVirtualPathProvider(new RavenDbPathProvider());