我遇到了一个问题,我无法访问 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 查询内联粘贴到代码中?
最佳答案
我找到了这个问题的几个答案。
将脚本添加为项目资源并像这样使用它:
string sql = Resources._20170630085940_AddMigration; migrationBuilder.Sql(sql);
这个选项不太好,因为 .sql 将嵌入到程序集中。
如果您使用具有 .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/