如何强制新的空EF迁移?

Mar*_*ara 6 c# asp.net-mvc entity-framework ef-migrations

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

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

Dav*_*pko 6

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

Add-Migration "My new empty migration"
Run Code Online (Sandbox Code Playgroud)

这将生成此迁移模板

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

    public override void Down()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

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


E-B*_*Bat 5

您必须添加一个空迁移,然后将代码手动添加到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"));
}
Run Code Online (Sandbox Code Playgroud)

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