2017-04-27 91 views
0

我第一次和迁移使用EF代码有一个ASP.NET MVC项目。迁移与实体框架6码第一

我想一个新的属性添加到一个类。为此,我创建了迁移代码,以便在与该类相关的表中添加特定列。

我的迁移代码如下:

public partial class Add_DataRequisicao_to_BiblRequisicao : DbMigration 
{ 
    public override void Up() 
    { 
     AddColumn("dbo.BiblRequisicoes", "DataRequisicao", c => c.String(nullable: false, defaultValue: "01/01/1900 00:00")); 
    } 

    public override void Down() 
    { 
     DropColumn("dbo.BiblRequisicoes", "DataRequisicao"); 
    } 
} 

而且属性添加到类如下:

[Required] 
[Display(Name = "Data Requisição")] 
public string DataRequisicao { get; set; } 

当我发布该项目并转到项目网站,我收到以下错误消息:

无法更新数据库以匹配当前模型,因为有挂起的c挂起和自动迁移被禁用。将挂起的模型更改写入基于代码的迁移或启用自动迁移。将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移。

检查数据库,我看到迁移是成功运行的,因为该列已创建。在迁移表中,还有一个新条目表明迁移运行。

迁移项:

MigrationId: 201704261436437_Add_DataRequisicao_to_BiblRequisicao 
ContextKey: WebAppInvestigacaoMultimedia.Migrations.Configuration 
Model: 0x1F8B0800000... 
ProductVersion: 6.1.3-40302 

我不明白为什么我得到错误信息,如果迁移成功的名称和属性的类型RAN是一样的附加列表。

+0

您是如何创建迁移的?你使用了Add-Migration还是你自己添加了这个类? – Gimly

+0

您是否使用自动或基于代码的迁移?从代码示例中提供的2种方法中,我认为您正在使用'Add-Migrations',这意味着基于代码的迁移。在包管理器控制台中使用'-Verbose -Script'标志来查看数据库脚本和执行迁移过程的步骤。 –

+0

@Gimly我用添加迁移 – miguelbgouveia

回答

1

这个错误通常是与还没有被添加到迁移脚本尚未改变模型。

如果你看看你有你的迁移文件夹,你应该有resx文件,这些文件包含生成迁移时模型的“快照”。因此它知道是否有对模型进行的更改,并且如果存在未决的更改,则不会让您执行更新数据库。

要解决此问题,您可能已回滚你的模型,因为你的最后一次迁移所做的任何更改,或创建一个使用添加迁移新的迁移,然后做更新的数据库。

如果你和一个团队一起工作,这些问题如果您和其他人所做的更改模型或创建迁移时有发生。查询this interesting MSDN article以了解如何利用这些问题。

+0

问题是我在添加类属性之前通过添加迁移命令创建迁移代码。创建属性首先解决我的问题。 – miguelbgouveia

+0

迁移工具非常强大,它将直接为您对模型进行的大部分更改创建良好的迁移脚本。尽管要注意破坏性更改,但可能会丢失数据。祝你好运。 – Gimly