C# 使用entity framework 7添加新迁移时未将表添加到数据库

C# 使用entity framework 7添加新迁移时未将表添加到数据库,c#,asp.net,asp.net-mvc,entity-framework,entity-framework-migrations,C#,Asp.net,Asp.net Mvc,Entity Framework,Entity Framework Migrations,我正在使用最新的ASP.NET Core 1.0和EF7 我从头开始创建了一个新的ASP.NET Core 1.0 MVC Web应用程序,运行初始迁移非常简单: dnx ef migrations add Initial dnx ef database update (我认为我不需要运行这个数据库更新命令,但还是运行了) 此外,我还有以下内容作为DbContext的构造函数,我认为我也不需要它: public ApplicationDbContext() { Database.E

我正在使用最新的ASP.NET Core 1.0和EF7

我从头开始创建了一个新的ASP.NET Core 1.0 MVC Web应用程序,运行初始迁移非常简单:

dnx ef migrations add Initial
dnx ef database update 
(我认为我不需要运行这个数据库更新命令,但还是运行了)

此外,我还有以下内容作为DbContext的构造函数,我认为我也不需要它:

public ApplicationDbContext()
{
     Database.EnsureCreated();
}
创建初始迁移后,我注意到数据库中添加了一个DbContext中任何DbSet的表

现在,我只需再添加一个模型,并在我的DbContext中为该模型再添加一个DbSet,然后运行以下操作:

dnx ef migrations add BookMigration
dnx ef database update
调用数据库更新时,我注意到迁移尝试为所有迁移运行和创建表,而不仅仅是应用我的新迁移


这是虫子吗?我怎样才能避免这种情况呢?

我自己对EF7还不太熟悉,但你的问题引起了我的兴趣,因为看起来你做的一切都是对的。然而,根据我从早期版本的EF中了解到的情况,
数据库.EnsureCreated()
行突然向我跳了出来。稍后进行一点研究,我想我发现了您的问题:

所有的功劳都归于这篇文章的原作者,但为了子孙后代,我将在这里进行总结。这篇文章的主要内容是罗文·米勒(Rowan Miller)对Github的一个相关问题的评论:

重新创建
完全绕过迁移,只为您创建架构,您不能将此与迁移混合使用。EnsureRecreated是为测试或快速原型设计的,您可以每次删除并重新创建数据库。如果您正在使用迁移,并且希望在应用程序启动时自动应用迁移,则可以改用
context.Database.Migrate()


我认为,要点是,重新创建的在功能上等同于从早期版本的EF进行自动迁移,只有在不尝试手动迁移的情况下,它才起作用。本质上,这是一个非此即彼的问题。无论如何,好好阅读这篇文章,这样你就能理解所有的含义。

有任何强制标志吗?我试过做“dnx ef数据库更新-详细”,但由于无法工作,它会立即尝试为CreateIdentitySchema添加迁移,而不是我添加到队列中的迁移。因此,我删除了CreateIdentitySchema并重新创建并尝试运行数据库更新,但仍然收到相同的错误。我将尝试重新启动VS并重建项目。据我所知,
Encreated
每次都会破坏数据库,因此您丢失了迁移历史记录表。没有这一点,任何迁移都不会起作用。在删除
并重新创建
之后,您可能只需要重新开始使用数据库,这正是发生的事情!出于好奇,如果我每次启动我的webapp时都继续重新创建并希望采用自动迁移方式,它会注意到DbContext的更改,并自动为我应用迁移,不是吗?从技术上讲。不过,这几乎是一种直截了当的做法。它每次都会创建一个新的数据库,所以它总是最新的模式,然而,从技术上讲,没有什么东西是“迁移”的,所以如果您有样本数据或需要保留一些数据来进行测试,它会干扰这一点。