2012-07-31 24 views
1

所以我使用实体框架代码第一次迁移。EF Code First Migrations - 它如何记住以前的模型更改?

我对我的模型进行了更改,添加了一个新的手动迁移,并且它获得了错误的向上脚本。

所以我删除了迁移,同时我不会按照我的想法改变它。在删除迁移课程并重置模型(即将模型恢复原样)后,我再次更改模型。

当我生成一个新的迁移时,这个迁移的行为就像是从我删除的那个迁移过来的。

如果清理并删除迁移,实体框架代码如何知道最后模型状态?

你如何重置?

+0

您是否在删除之前执行迁移? – 2012-07-31 12:42:04

+0

不 - 这就是为什么我迷失在它“知道”我以前有过一个。原本以为这是一些“obj”文件或类似的文件,但干净的没有做任何事情 – Doug 2012-08-01 10:13:21

回答

0

您可能没有删除它下面的设计器文件,其中包含有关自动迁移的信息,直到此刻。

http://msdn.microsoft.com/en-US/data/jj554735

运行Add-迁移AddBlogRating命令

迁移也有一个代码隐藏文件,捕捉一些元数据。这个元数据将允许Code First Migrations复制我们在基于代码迁移之前执行的自动迁移。如果另一个开发人员想要运行我们的迁移或部署我们的应用程序时,这一点非常重要。

代码隐藏文件类似于201206292305502_AddBlogRating.Designer.cs文件,位于您创建的手动迁移类下面。它看起来像:

public sealed partial class AddBlogRating : IMigrationMetadata 
{ 
    string IMigrationMetadata.Id 
    { 
     get { return "201206292305502_AddBlogRating"; } 
    } 

    string IMigrationMetadata.Source 
    { 
     get { return "H4sIAAAAAAAEAOy9B2AcSZ...=="; } 
    } 

    string IMigrationMetadata.Target 
    { 
     get { return "H4sIAAAAAAAEAOy9B2AcSZ...=="; } 
    } 
} 

这2个字符串是在迁移之前和之后编码整个模型的转储的base64。这个想法是,之前的第一手动迁移任何记录是自动的,所以,当你申请这一切到一个新的DB它可以看看,并说:

手动1
手册2

检查源代码,以确定之前的目标模式Manual1,使用Automatic方法应用,应用Manual1,检查Manual2上的Source,使用自动方法到达那里,应用Manual2,最后使用自动方法从那里获取当前编译模型状态。

2

在您的数据库的“表/系统表”下(假设您使用SQL Management Studio),编辑Table __MigrationHistory

在我删除了所有迁移* .cs文件后仍然让我迷迷糊糊,并且VS仍然“知道”了旧迁移!