数据库未在第一时间创建

时间:2014-09-22 18:06:42

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

如何使用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
  3. 我已经在网络服务器上发布了我的示例。我正在使用 Sql Server 2012 Express DBMS。

    当我创建我的应用程序并将其发布到Web服务器上时,它运行正常。它已自动创建数据库。之后我在ApplicationDBContext进行了一些更改,并在IdentityModes(ApplicationUser)中添加了一些属性。然后我在本地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.
    

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

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

    我还读过这个 post 并试图调用dbContext.Database.Initialize(true);((IObjectContextAdapter)myContext).ObjectContext.CreateDatabase()方法,但仍然无效。

2 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:2)

Chris Pratt是正确的BTW。

我下载了一个项目,我需要运行" Update-Database

以下是快速截图

enter image description here

然后在Visual Studio的底部

 PM> Update-Database

DONE