2014-03-05 17 views
2

好的,所以我完全依赖我的迁移和种子代码来维护所有数据库结构和初始数据。因此,我面临的情况是,我在此版本中所做的所有更改都直接在数据库(存储过程和更新)上进行,而C#代码本身没有任何更改。因为我想使用新的迁移来做这些DataBase特定的更改(并且“添加迁移”不会执行任何操作 - 导致代码没有更改),所以如何强制新的空代码第一次迁移将我的更改手动放在它上面?如何强制执行新的空EF迁移?

+0

可能的重复http://stackoverflow.com/questions/7667630/can-you-create-sql-views-stored-procedure-using-entity-framework-4-1-code-firs –

+0

不重复,这是问题是关于基于代码的迁移,而您指向的另一个关于代码优先。 –

回答

2

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

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/

+0

问题是:一旦我创建了一个迁移.cs文件,使用DbMigration的部分类,部分的Up和Down方法(与“add-migration”命令创建的方法完全一样),然后运行“update-database”它只是简单地报告“没有正在进行的基于代码的迁移”...:/ –

+0

您必须像通常那样使用添加迁移来创建文件。之后,您将拥有一个空的迁移文件,即您必须编辑Up和Down方法(如我提供的示例代码)。这样Update-Database将完成它的工作。 –

1

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

Add-Migration "My new empty migration" 

这会产生这种迁移模板

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

    public override void Down() 
    { 
    } 
} 

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