使用实体框架7添加新迁移时,表未添加到数据库

Bla*_*ell 3 c# asp.net asp.net-mvc entity-framework ef-migrations

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

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

dnx ef migrations add Initial
dnx ef database update 
Run Code Online (Sandbox Code Playgroud)

(我认为我不需要运行此数据库更新命令,但无论如何都要这样做)

另外,我有以下作为我的DbContext的构造函数,我认为我不需要:

public ApplicationDbContext()
{
     Database.EnsureCreated();
}
Run Code Online (Sandbox Code Playgroud)

创建初始迁移后,我注意到我的DbContext中的任何DbSet表都添加到数据库中.

现在我只添加了一个模型,并在我的DbContext中为该模型添加了一个DbSet并运行以下命令:

dnx ef migrations add BookMigration
dnx ef database update
Run Code Online (Sandbox Code Playgroud)

在调用数据库更新时,我注意到迁移尝试运行并为所有迁移创建表,而不是仅应用我的新迁移.

这是一个错误吗?我怎么能阻止这个?

Chr*_*att 5

我自己并不过分熟悉EF7,但你的问题引起了我的兴趣,因为看起来你做的一切都很正确.然而,根据我之前版本的EF所知,这Database.EnsureCreated()条线路正在跳出来.稍后进行一点研究,我想我在这里找到了你的问题:http://thedatafarm.com/data-access/ef7-ensurecreated-vs-migrate-methods/

所有的功劳都归功于这篇文章的原作者,但为了后人,我将在这里总结一下.这篇文章的主要内容是Rowan Miller对与此相关的Github问题的评论:

EnsureCreated完全绕过迁移并只为您创建架构,您不能将其与迁移混合在一起.EnsureCreated专为测试或快速原型设计而设计,您可以在每次删除和重新创建数据库时使用.如果您正在使用迁移并希望在应用启动时自动应用它们,则可以context.Database.Migrate()改为使用.

我认为,要点EnsureCreated是功能等同于以前版本EF的自动迁移功能,只有在您不尝试手动迁移时才能使用.从本质上讲,这是一个或两件事.无论如何,给帖子一个良好的阅读,以便你了解所有的含义.