我刚刚开始理解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用户?
答案 0 :(得分:1)
您的实体中看起来还有其他未在迁移中考虑的更改。执行“Add-Migration
”应该会在您面前进行更改。