如何强制新的空EF迁移?

时间:2014-03-05 11:29:23

标签: c# asp.net-mvc entity-framework ef-migrations

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

问题是:由于我想使用新的迁移进行那些特定于DataBase的更改(并且“添加 - 迁移”将不执行任何操作 - 因为代码没有更改),我该如何强制新的空代码迁移以手动对我进行更改?

3 个答案:

答案 0 :(得分:5)

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

Add-Migration "My new empty migration"

这将生成此迁移模板

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

    public override void Down()
    {
    }
}

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

答案 1 :(得分:4)

您必须添加空迁移并手动将代码添加到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"));
}

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

答案 2 :(得分:1)

这是最新的答案...

在Visual Studio的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)
    {

    }
}

然后运行以下命令:

update-database -context YourDbContextName