C# 如何强制执行新的空EF迁移?

C# 如何强制执行新的空EF迁移?,c#,asp.net-mvc,entity-framework,entity-framework-migrations,C#,Asp.net Mvc,Entity Framework,Entity Framework Migrations,好的,所以我完全依靠迁移和种子代码来维护所有数据库结构和初始数据。因此,我面临的情况是,我在这个版本中所做的所有更改都是直接在数据库上进行的(存储的过程和更新),而C#代码本身没有任何更改 问题是:既然我想使用新的迁移来做那些特定于数据库的更改(而“添加迁移”将不起任何作用-因为代码没有更改),我如何强制新的空代码第一次迁移手动将更改放在上面?您必须添加一个空迁移并手动将代码添加到Up和Down方法中。我发现人们倾向于认为这些方法的代码必须由类似于“.designer”文件的工具生成,而事实并非

好的,所以我完全依靠迁移和种子代码来维护所有数据库结构和初始数据。因此,我面临的情况是,我在这个版本中所做的所有更改都是直接在数据库上进行的(存储的过程和更新),而C#代码本身没有任何更改


问题是:既然我想使用新的迁移来做那些特定于数据库的更改(而“添加迁移”将不起任何作用-因为代码没有更改),我如何强制新的空代码第一次迁移手动将更改放在上面?

您必须添加一个空迁移并手动将代码添加到Up和Down方法中。我发现人们倾向于认为这些方法的代码必须由类似于“.designer”文件的工具生成,而事实并非如此。事实上,我经常在那里发现我的自我编辑和添加代码。 为此,我将必须执行的所有sql代码放在脚本文件中,然后在Up方法中执行,如下所示:

public override void Up(){
    var dirBase = AppDomain.CurrentDomain.BaseDirectory.Replace(@"\bin",string.Empty) + @"\Migrations\SqlScripts";
    Sql(File.ReadAllText(dirBase + @"\CreateMyViews.sql"));
    Sql(File.ReadAllText(dirBase + @"\CreateMySproc.sql"));
}

public override void Down(){
        var dirBase = AppDomain.CurrentDomain.BaseDirectory.Replace(@"\bin",string.Empty) + @"\Migrations\SqlScripts";
    Sql(File.ReadAllText(dirBase + @"\DropMySproc.sql"));
    Sql(File.ReadAllText(dirBase + @"\DropMyViews.sql"));
}
我建议您阅读以下链接:

在package manager控制台中发出命令

Add-Migration "My new empty migration"
这将生成此迁移模板

public partial class Mynewemptymigration : DbMigration
{
    public override void Up()
    {
    }

    public override void Down()
    {
    }
}

然后,您可以创建自己的自定义上下迁移步骤。如果您的模型不是最新的,则上下界面中会出现迁移代码。在这种情况下,您必须更新您的模型,然后添加新的空迁移。

这是一个更为最新的答案

在Visual Studio中,添加一个针对数据库上下文的空迁移

add-migration SeedingFacilityTable -context YourDbContextName
它将创建一个空迁移,前提是您没有任何其他要应用的DB更改

Up
方法中,写出以下内容:

public partial class SeedingFacilityTable : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.Sql(@"Put as many SQL commands as you want here");
    }

    protected override void Down(MigrationBuilder migrationBuilder)
    {

    }
}
然后运行以下命令:

update-database -context YourDbContextName

可能重复未重复,这是一个关于基于代码的迁移的问题,而您所指的另一个问题仅与代码有关。问题是:使用DbMigration的部分类创建migration.cs文件后,使用部分Up和Down方法(与“add migration”命令创建的方法完全相同)然后运行“update database”它只是报告“没有挂起的基于代码的迁移”…:/您必须像通常那样使用添加迁移创建文件。之后,您将有一个空的迁移文件,您必须编辑Up和Down方法,如我提供的示例代码。这样更新数据库就可以完成它的工作。