所以我使用实体框架代码第一次迁移。EF Code First Migrations - 它如何记住以前的模型更改?
我对我的模型进行了更改,添加了一个新的手动迁移,并且它获得了错误的向上脚本。
所以我删除了迁移,同时我不会按照我的想法改变它。在删除迁移课程并重置模型(即将模型恢复原样)后,我再次更改模型。
当我生成一个新的迁移时,这个迁移的行为就像是从我删除的那个迁移过来的。
如果清理并删除迁移,实体框架代码如何知道最后模型状态?
你如何重置?
所以我使用实体框架代码第一次迁移。EF Code First Migrations - 它如何记住以前的模型更改?
我对我的模型进行了更改,添加了一个新的手动迁移,并且它获得了错误的向上脚本。
所以我删除了迁移,同时我不会按照我的想法改变它。在删除迁移课程并重置模型(即将模型恢复原样)后,我再次更改模型。
当我生成一个新的迁移时,这个迁移的行为就像是从我删除的那个迁移过来的。
如果清理并删除迁移,实体框架代码如何知道最后模型状态?
你如何重置?
您可能没有删除它下面的设计器文件,其中包含有关自动迁移的信息,直到此刻。
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,最后使用自动方法从那里获取当前编译模型状态。
在您的数据库的“表/系统表”下(假设您使用SQL Management Studio),编辑Table __MigrationHistory
。
在我删除了所有迁移* .cs文件后仍然让我迷迷糊糊,并且VS仍然“知道”了旧迁移!
您是否在删除之前执行迁移? – 2012-07-31 12:42:04
不 - 这就是为什么我迷失在它“知道”我以前有过一个。原本以为这是一些“obj”文件或类似的文件,但干净的没有做任何事情 – Doug 2012-08-01 10:13:21