Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

Why is filePath null? Any ideas on how to get the relative filePath?

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
    }
}

I have the above code in Configuration.cs file in Migrations folder created when entity framework is set up on an ASP .NET MVC project

When I run "Update-Database -Verbose" in Package Manager Console I get an error that filePath is null.

If I manually set filePath with an absolute URL to the file:

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

Everything works fine.

Obviously the goal is to have a relative path to enable work with different developers on different setups.

Truth be told all I need is the file - not necessarily the path. Any help will be appreciated.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
440 views
Welcome To Ask or Share your Answers For Others

1 Answer

I use this function to map paths inside the Seed method, not very clean but it works:

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;
}

then just call it using:

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...