我们正在使用EF Migrations 6.1.2中新的DbMigration.SqlFile方法在迁移中运行迁移脚本。根据the documentation,文件必须相对于当前AppDomain BaseDirectory。我们已经将这些文件包括在项目中,并将它们设置为复制到输出目录。
在本地,这一切运行良好。他们将输出输出到bin目录,并且运行良好。

但是,将软件部署到运行IIS的服务器时,迁移会失败,因为它突然希望文件相对于根目录。当我将它们复制到那里时,迁移就可以了。

如何使用DbMigration.SqlFile使其在本地和服务器上都能正常运行?

最佳答案

如果给出了相对路径,SqlFile方法将使用CurrentDomain.BaseDirectory。一种解决方法是自己映射路径并为该方法提供绝对路径。一个解决方案如下所示:

var sqlFile = "MigrationScripts/script1.sql";
var filePath = Path.Combine(GetBasePath(), sqlFile);
SqlFile(filePath);

public static string GetBasePath()
{
    if(System.Web.HttpContext.Current == null) return AppDomain.CurrentDomain.BaseDirectory;
    else return Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"bin");
}

BasePath解决方案取自:Why AppDomain.CurrentDomain.BaseDirectory not contains "bin" in asp.net app?

10-08 04:32