【发布时间】:2011-10-30 19:23:23
【问题描述】:
我关注了来自 ADO.NET 团队 Code First Migrations 的帖子:Alpha 3 ‘No-Magic’ Walkthrough
我正在尝试使用 sql 读取文件以在 asp.net mvc Web 应用程序中进行迁移。我正在使用sql方法。问题是,无论我做什么,我都无法获得项目的根路径。我总是得到 'c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\'
有人可以指点我打开文件的方法吗?
谢谢。
已编辑
public partial class AddMembership : DbMigration { public override void Up() { //var file = File.OpenText(System.IO.Path.GetDirectoryName() + "Model/Schema/membership-up.sql"); //var file = File.OpenText(AppDomain.CurrentDomain.BaseDirectory + "Model/Schema/membership-up.sql"); //var path = HttpContext.Current.Request.MapPath("/Models/Schema/membership-up.sql"); var path = HttpContext.Current.Server.MapPath("/Models/Schema/membership-up.sql"); Sql(file.ReadToEnd()); } public override void Down() { // .... } }
【问题讨论】:
-
嗨,marc_s,我发布了一些我尝试过的代码。
-
好的,有两件事:(1) 这样做
/Models文件夹和.sql 文件真的存在于您部署的ASP.NET 站点中吗? (2):您很可能需要使用基于波浪号的映射:.MapPath("~/Models/Schema/membership-up.sql") -
嘿marc_s,感谢您的回复。是的,该文件夹存在但在我的开发项目中。我也试过'〜'。正如我在 jdross 回复中评论的那样,使用 MapPath 会引发异常。由于此代码是在包管理器控制台中调用的,我不确定我们是否可以抛出 HttpContext。
-
如果您只指定整个完整路径,可能从配置文件或其他内容中读取,该怎么办?如果您在包管理器控制台中调用它,那应该可以工作(不需要 Server.MapPath)。
-
我想过,但我希望有一个独立于我的项目路径的解决方案,因为此代码用于团队环境。我无法在 .NET API 中找到一些东西来获取我的项目路径,至少在没有抛出 System.NullReferenceException 的情况下。
标签: asp.net-mvc ef-code-first entity-framework-migrations