[英]Entity Framework - How to get relative file path in seed method
為什么filePath為null? 有關如何獲取相對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
}
}
我在ASP .NET MVC項目上設置實體框架時創建的Migrations文件夾中的Configuration.cs文件中有上述代碼
當我在包管理器控制台中運行“Update-Database -Verbose”時,我收到一個錯誤,即filePath為null。
如果我手動設置filePath與文件的絕對URL:
string filePath = "C:/Users/User1/My Documents/Visual Studio 2012/Projects/MvcProject/Content/File.txt";
一切正常。
顯然,目標是建立一個相對路徑,以便在不同的設置上與不同的開發人員一起工作。
真相被告知所有我需要的是文件 - 不一定是路徑。 任何幫助將不勝感激。
我用這個函數來映射Seed方法里面的路徑,不是很干凈但是它有效:
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")))
正如我所說的,我相信你從一個頁面調用它並且System.Web.HttpContext.Current
為null,因為MapPath
函數永遠不會返回帶有非null輸入的null - 所以你在那里得到一個例外。
嘗試替代方案:
string filePath = HttpRuntime.AppDomainAppPath + "/Content/File.txt";
要么
string filePath = HostingEnvironment.MapPath("~/Content/File.txt");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.