Entity Framework 迁移:在 ASP.NET 中访问 sql 文件

Entity Framework migration: access sql file within ASP.NET

我有一个 ASP.NET Web API 项目。我正在使用 Entity Framework 迁移。目前,我有一个要在迁移期间执行的自定义脚本。为此,我正在使用 SqlFile 方法:

SqlFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Migrations/Scripts/MyCustomScript.sql"));

这在集成测试中工作正常,如果我将脚本的 "Copy to Output Directory" 设置为 "Copy always"。

然而,当 运行 网站时,脚本被复制到 <websiteroot>\bin\Migrations\MyCustomScript.sql,而 AppDomain.CurrentDomain.BaseDirectory 指向网站根目录。因此,抛出一个错误,指出找不到脚本:它位于 bin 文件夹中,而不是根目录中。

如何加载脚本,以便在测试和实际网站中都能正常工作?

我会这样解决(这不是最好的方法,但这是一种方法)

string sqlfilepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Migrations/Scripts/MyCustomScript.sql");
if (!File.Exists(sqlfilepath))
    sqlfilepath = "your other path where it might exist";

我会将脚本包含在您的 dll 中,而不是直接从 dll 加载脚本。比你不需要任何 if 语句,你总是知道你有正确的脚本。将构建操作设置为嵌入式资源。然后你可以得到这样的脚本:

Assembly assembly = Assembly.LoadFile(dll);
using (Stream stream = assembly.GetManifestResourceStream(resourcepath))
using (StreamReader reader = new StreamReader(stream))
{
    string script = reader.ReadToEnd();