【问题标题】:Database is not getting created at first time第一次没有创建数据库
【发布时间】:2014-09-22 18:06:42
【问题描述】:

如何使用 EF6 重新创建数据库?

我已经尝试了以下两个帖子,但我不知道为什么它不起作用并出现相同的错误。

  1. How do I generate an EF6 database with migrations enabled, without using update-database?
  2. Migrations is enabled for context ''but the database does not exist or contains no mapped tables

我已经在网络服务器上发布了我的示例。我正在使用 Sql Server 2012 Express DBMS。

当我创建我的应用程序并将其发布到 Web 服务器上时,它运行良好。它已自动创建数据库。之后我在ApplicationDBContext 中进行了一些更改,并在IdentityModes(ApplicationUser) 中添加了一些属性。然后我在我的 Local IIS Express 上迁移了数据库,它工作正常。然后我尝试在 Web 服务器上再次发布我的示例,但是这次它显示了一个错误。

Migrations is enabled for context 'ApplicationDbContext' but the database does 
not exist or contains no mapped tables. Use Migrations to create the database 
and its tables, for example by running the 'Update-Database' command from the 
Package Manager Console.

我已删除网络服务器上的数据库并再次尝试。但是,我仍然面临同样的错误。现在,有一个没有表的空数据库。

应用程序正在创建用户注册数据库。

我也读过这个 post 并尝试调用 dbContext.Database.Initialize(true);((IObjectContextAdapter)myContext).ObjectContext.CreateDatabase() 方法,但仍然无法正常工作。

【问题讨论】:

    标签: asp.net-mvc entity-framework-6 database-migration


    【解决方案1】:

    首先,自动迁移非常适合开发,但在生产中依赖它们是一个非常糟糕的主意。其次,在某些时候您关闭了自动迁移,这就是您的生产数据库中不再创建表的原因。

    继续关闭自动迁移;即使在开发中,最好通过生成迁移、查看将要执行的代码,然后运行Update-Database 来应用这些更改,从而准确了解您对数据库所做的更改。

    在将架构更新投入生产方面,您有多种选择,但它们都归结为大致相同的过程。

    1. 针对您的本地数据库生成新的迁移。
    2. 如果要通过 SQL 更新生产数据库,请运行 Update-Database -Script。这将生成一个 SQL 文件,其中包含要在数据库上运行以迁移架构的代码。如果您有,请将其交给您的 DBA,或者自己查看 SQL 代码,然后通过 Management Studio 将其手动应用到您的数据库中。
    3. 运行Update-Database。这次没有 -Script 来更改您的本地数据库架构。
    4. 如果您没有在步骤 2 中生成 SQL 文件,请在 Visual Studio 的 SQL Server 对象资源管理器中查看您的本地数据库。右键单击那里的本地数据库并选择“架构比较...”。按照向导与您的生产数据库进行比较。最后,您可以生成一个包含需要进行必要更改的 SQL 文件(同样,如果有的话,您可以将其交给 DBA),或者您可以直接从 Visual Studio 迁移到生产环境。但是,这并不是真正推荐的。最好生成 SQL,然后您或您的 DBA 可以在实时应用更改之前对其进行检查。

    【讨论】:

    • 谢谢克里斯,现在,它正在工作。启用Migration 功能时不会创建数据库。所以,我从项目中删除了Migration 文件夹,从数据库中删除了_MigrationHistory 表,然后我再次发布了它。然后再次尝试,它就像魔术一样工作。再次感谢克里斯,我 2 天以来一直在尝试解决它。​​
    【解决方案2】:

    克里斯普拉特是正确的顺便说一句。

    我下载了一个项目,我只需要在其中运行“Update-Database”

    这里是快速截图

    然后在 Visual Studio 的底部

     PM> Update-Database
    

    完成

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多