我正在使用最新的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的Database.EnsureCreated()
早期版本中了解到的情况,这条线对我跳了出来。稍作研究之后,我想我在这里找到了您的问题:http : //thedatafarm.com/data-access/ef7-ensurecreated-vs-migrate-methods/
一切归功于这篇文章的原始作者,但是为了后代,我将在这里进行总结。该帖子的内容来自Rowan Miller对与此相关的Github问题的评论:
EnsureCreated
完全绕过迁移,只是为您创建模式,您不能将其与迁移混在一起。确保创建是为了测试或快速原型设计的,您可以每次删除并重新创建数据库。如果您正在使用迁移,并希望在应用启动时自动应用它们,则可以context.Database.Migrate()
改用。
我认为要点是,EnsureCreated
它的功能等效于从早期版本的EF进行自动迁移,该功能也仅在您不尝试手动迁移时才起作用。本质上,这是一个“或/或”的事情。无论如何,请充分阅读该文章,以便您理解所有含义。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句