首先迁移 Entity Framework 6 个代码

Migration with Entity Framework 6 code first

我有一个 ASP.NET MVC 项目首先使用 EF 代码和迁移。

我正在尝试将新的 属性 添加到 class。为此,我创建了迁移代码,以便在 table 中添加与 class 相关的特定列。

我的迁移代码如下:

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");
    }
}

要添加到 class 的 属性 如下:

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

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

Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration.

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

迁移入口:

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

如果迁移 运行 成功并且 属性 的名称和类型与 [=] 的添加列相同,我不明白为什么我会收到错误消息35=].

此错误通常与尚未添加到迁移脚本的模型更改有关。

如果您查看迁移所在的文件夹,您应该有 resx 个文件,这些文件包含生成迁移时模型的 "snapshot" 个。因此,它知道是否对模型进行了更改,如果有未决更改,它不会让您执行更新数据库。

要解决此问题,您必须回滚自上次迁移以来对模型所做的任何更改,或者使用 Add-Migration 创建新迁移,然后执行 Update-Database。

如果您与团队合作,如果您和其他人都对模型进行了更改或创建了迁移,那么有时会发生这些问题。检查 this interesting MSDN article 以获得有关如何利用这些问题的一些见解。