实体框架 - 如何获得种子的方法相对文件路径(Entity Framework - How to g

2019-09-01 07:09发布

为什么是文件路径为空? 如何获取相对文件路径的任何想法?

internal sealed class Configuration : DbMigrationsConfiguration<MvcProject.Models.FileDb>
{
    public Configuration()
    {
        // code here is not relevant to question
    }
    protected override void Seed(MvcProject.Models.FileDb context)
    {    
        string filePath = System.Web.HttpContext.Current.Server.MapPath("~/Content/File.txt");

        // read File.txt using filePath and update the database
    }
}

我在当实体框架是建立在ASP .NET MVC项目创建迁移文件夹中的文件Configuration.cs上面的代码

当我运行的软件包管理器控制台“更新,数据库-Verbose”我得到一个错误,文件路径为空。

如果我手动设置文件路径以绝对URL到文件中:

string filePath = "C:/Users/User1/My Documents/Visual Studio 2012/Projects/MvcProject/Content/File.txt";

一切工作正常。

显然,我们的目标是有一个相对路径,以实现与不同设置不同的开发工作。

说实话我需要的是文件 - 不一定路径。 任何帮助将不胜感激。

Answer 1:

我用这个功能来种子法里面映射路径,不是很干净,但它的工作原理:

private string MapPath(string seedFile)
{
    if(HttpContext.Current!=null)
        return HostingEnvironment.MapPath(seedFile);

    var absolutePath = new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath; //was AbsolutePath but didn't work with spaces according to comments
    var directoryName = Path.GetDirectoryName(absolutePath);
    var path = Path.Combine(directoryName, ".." + seedFile.TrimStart('~').Replace('/','\\'));

    return path;
}

然后叫它使用:

   using (var streamReader = new StreamReader(MapPath("~/Data/MyFile.csv")))


Answer 2:

正如我说的,我相信你从一个页面中调用它和System.Web.HttpContext.Current是空的,因为MapPath功能从未有没有空的输入返回null -让您得到一个异常那里。

尝试选择:

string filePath = HttpRuntime.AppDomainAppPath + "/Content/File.txt";

要么

string filePath = HostingEnvironment.MapPath("~/Content/File.txt");

相关的问题: 如何访问HttpServerUtility.MapPath方法的线程或计时器?



文章来源: Entity Framework - How to get relative file path in seed method