如何强制进行新的空EF迁移?

问题描述 投票:9回答:3

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

问题是:由于我想使用新的迁移来进行那些特定于数据库的更改(并且“ add-migration”不会做任何事情-导致代码未更改),如何强制第一次迁移新的空代码手动添加我的更改?

c# asp.net-mvc entity-framework ef-migrations
3个回答
6
投票

您必须添加一个空迁移,并将代码手动添加到Up和Down方法中。我发现人们倾向于认为这些方法的代码必须由类似于“ .designer”文件的工具生成,而事实并非如此。实际上,我经常发现自己在其中进行自我编辑和添加代码。为此,我将必须执行的所有sql代码放在脚本文件中,然后将execute放在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"));
}

我建议您阅读此链接:http://elegantcode.com/2012/04/12/entity-framework-migrations-tips/


7
投票

在程序包管理器控制台中,发出命令

Add-Migration "My new empty migration"

这将生成此迁移模板

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

    public override void Down()
    {
    }
}

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


0
投票

这是最新的答案...

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

Package Manager Console

如果您没有要应用的其他数据库更改,它将创建一个空迁移。

add-migration SeedingFacilityTable -context YourDbContextName 方法内,编写以下内容:

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)
    {

    }
}
© www.soinside.com 2019 - 2024. All rights reserved.