实体:生产无效的自动迁移

时间:2016-10-09 18:46:19

标签: c# sql-server entity-framework ef-migrations

我已经查看了有关SO以及博客和官方MS文档的其他问题,但我找不到正确的方法。 我想要实现的目标:

  1. 使用SQL DB部署MVC网站的第1版(代码基于Entity Code First v.6.1),没有任何迁移概念,因为它是DB SCHEMA v.1
  2. 在软件包管理器控制台中自动迁移到SCHEMA v2(然后是v3等)和而不运行Update-Database ,部署更多版本(2,3,...)
  3. 因此,遵循MS教程(即https://msdn.microsoft.com/en-gb/data/jj591621.aspx)版本1为Schema v1创建表:

    • 包含两列的博客表(BlogId和名称)
    • __ MigrationHistory有一行(MigrationId包含InitialCreate)。不知道这是什么,但我想这是最初的架构。我是对的吗?

    然后我打开软件包管理器控制台,输入:Enable-Migrations,创建用于迁移的类(201610091823367_InitialCreate.cs和Configuration.cs)。然后我按照教程中的建议修改Blog类以获得新的属性Url并运行Add-Migration AddBlogUrl,这将创建201610091830008_AddBlogUrl.cs

    另外,我添加了

    Database.SetInitializer(new MigrateDatabaseToLatestVersion<BlogContext, Configuration>());
    

    到main,所以当应用程序启动时,它应该自动迁移。 我启动了应用程序v2,一切都运行良好。该表现在有了新专栏。

    当我再次启动应用程序v2时,它会崩溃,但例外情况为:

      

    未处理的异常:System.Data.SqlClient.SqlException: There is already an object named 'Blogs' in the database.以及所有相关的堆栈跟踪。

    所以看起来它没有意识到它在数据库中有最新的模式,所以它试图再次创建表。我在InitialCreate类中添加了一个断点,方法Up并调用它。我很惊讶!

    我也试过了另一种方法:

    1. 运行app v1
    2. 在Configuration类中使用AutomaticMigrationsEnabled = true;运行app v2b。结果是一样的。
    3. 任何人都可以帮我理解什么是错的,什么是正确的方法? 你能否确认在此期间我可以在没有启用迁移的情况下部署SCHEMA v1

      我希望实体能够涵盖这种情况。

0 个答案:

没有答案