c# - 如何使用 Entity Framework Core 运行迁移 SQL 脚本

标签 c# asp.net-core entity-framework-core entity-framework-migrations

我遇到了一个问题,我无法访问 SQL 脚本来应用迁移。 这是我的迁移代码:

 public partial class AddSomethingMigration : Migration
{
    private const string MIGRATION_SQL_SCRIPT_FILE_NAME = @"Migrations\Scripts\20170710123314_AddSomethingMigration.sql";

    protected override void Up(MigrationBuilder migrationBuilder)
    {
        string sql = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, MIGRATION_SQL_SCRIPT_FILE_NAME));
        migrationBuilder.Sql(File.ReadAllText(sql));
    }
}

因此,当我在本地计算机上使用包管理器控制台时,一切正常。但是当我部署到环境时,我发现文件不一致。

我能否通过 EF 迁移自动运行我的静态 SQL 脚本,或者我应该将 SQL 查询内联粘贴到代码中?

最佳答案

我找到了这个问题的几个答案。

  1. 将脚本添加为项目资源并像这样使用它:

    string sql = Resources._20170630085940_AddMigration;
    migrationBuilder.Sql(sql);
    

这个选项不太好,因为 .sql 将嵌入到程序集中。

  1. 如果您使用具有 .csproj 结构的 Net Core 项目,您可以将项目组添加到 xml:

    <ItemGroup> <Content Include="Migrations\**\*.sql" CopyToPublishDirectory="PreserveNewest" /><!-- CopyToPublishDirectory = { Always, PreserveNewest, Never } --></ItemGroup>
    

然后指定文件的路径,如:

Path.Combine(AppContext.BaseDirectory, relativePath)

关于c# - 如何使用 Entity Framework Core 运行迁移 SQL 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45035754/

相关文章:

c# - onclick 第二次点击

c# - 使用 Azure AD v2.0 进行保护时,在 [Authorize] 修饰的 Web API 方法上收到 404

c# - EF Core,按 UTC 日期按月和年分组

c# - Directory.GetCurrentDirectory() 不返回正确的目录

c# - 忽略联接实体的全局查询过滤器

c# - 在 WPF 中更改 Combobox 的边框颜色

c# - 在 Identity Asp.net core 3 MVC 中创建服务 IUserStore 时出错

c# - 带有子选择的 EF Core 5.0 联合 Linq 查询不起作用

c# - EF Core SingleOrDefaultAsync 编译时返回类型错误

c# - 如何从 .mov 视频文件头(QuickTime 文件格式)中读取比特率信息?