DbMigration.SqlFile 基本目录不同

DbMigration.SqlFile difference in base directory

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

然而,当将软件部署到服务器 运行ning 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?

我们在迁移中像这样使用它:SqlFile(@"..\..\Sql\views\SomeView.sql");