在Entify Framework 6

时间:2017-12-21 12:59:39

标签: c# entity-framework

我刚刚开始理解EF6在更新过程中如何运作,并且弄清楚了AutomaticMigrationsEnabled实际上做了什么。我正在尝试使用新的User表更新数据库。我为用户创建了一个新实体:

[Table("Users")]
public class User
{
    <Omitted properties>
}

在我一直在努力的项目中,已经选择使用显式迁移而不进行任何自动迁移。所以我创建了一个迁移脚本来创建数据库:

public partial class AddingUserTable : DbMigration
{
    public override void Up()
    {
        CreateTable("dbo.Users",.... Omitted for clarity
    }

    public override void Down()
    {
        DropTable("dbo.Users");
    }
}

并更新我的上下文,以便我可以访问:

public DbSet<User> Users { get; set; } 

此时,如果我执行&#34;更新数据库&#34;在NuGet包管理器控制台上,它将应用迁移脚本,但带有警告:

Applying explicit migration: 201712201003395_AddingUserTable. 
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.

事实证明,这是因为我将DBSet用户添加到我的上下文中。如果我删除该DBSet并再次更新数据库,则不会出现警告。如果我添加它,警告将再次出现。我知道警告是因为我通过添加集合更改了上下文并禁用了自动迁移,但我已经通过显式迁移脚本应用了更改。

我需要做什么才能让Entity Framework看到我已经为它进行了迁移并接受了没有警告的新DBSet用户?

1 个答案:

答案 0 :(得分:1)

您的实体中看起来还有其他未在迁移中考虑的更改。执行“Add-Migration”应该会在您面前进行更改。