4

我关注了 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()
    {
        // ....
    }
}
4

2 回答 2

0

要直接从站点运行迁移,您可以添加此代码

var dbMigrator = new DbMigrator(new Settings());
dbMigrator.Update();

要从任一进程(IIS 与包管理器控制台)运行迁移,您可以先检查是否在使用 Server.MapPath 之前创建了服务器对象,这样您就可以识别您是在 IIS 下还是在包管理器控制台下。如果 Server 对象为 null,则您位于 Package Manager Console 下,因此您可以使用更合适的方法来获取当前路径,例如

Directory.GetCurrentDirectory();

所以我会替换这段代码

var path = HttpContext.Current.Server.MapPath("/Models/Schema/membership-up.sql");

像这样的东西

String path;
if (HttpContext.Current.Server != null) {
    path = HttpContext.Current.Server.MapPath("/Models/Schema/membership-up.sql");
} else {
    path = Path.Combine(Directory.GetCurrentDirectory(), "Models/Schema/membership-up.sql");
}
于 2011-11-12T23:21:36.607 回答
0

使用 Server.MapPath 怎么样

http://msdn.microsoft.com/en-us/library/ms524632(v=vs.90).aspx

于 2011-10-30T19:25:47.343 回答