我们在EF迁移6.1.2中使用新的DbMigration.sqlFile方法在迁移中运行迁移脚本.根据
the documentation,该文件必须相对于当前的AppDomain BaseDirectory.我们已将这些文件包含在项目中,并将它们设置为复制到输出目录.
在当地这一切都运行良好.它们输出到bin目录,并运行正常.
在当地这一切都运行良好.它们输出到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?