如何强制EF代码首先重新创建数据库?

时间:2013-10-01 14:33:04

标签: c# asp.net-mvc entity-framework ef-code-first

我有一堆Code First创建的表。

然后在SQL中我删除了一个表,以便我不可避免地在堆栈上提出这个问题。

在包管理控制台中使用update-database后,我得到:

  

无法找到对象“dbo.ContractParents”,因为它不存在   或者您没有权限。

重建表格的最佳方法是什么?

我已经阅读了context.Database.CreateIfNotExists();

我把它放在我的种子功能中,但没有做任何事情。

谢谢!

3 个答案:

答案 0 :(得分:9)

解释update-database命令会发生什么以及种子中的context.Database.CreateIfNotExists()方法无效的原因:

当您运行update-database命令时,它首先查看您的连接字符串以查看数据库是否存在。如果是,它会查看迁移历史记录表,并根据您DbContext类中的内容进行检查。如果它发现缺少表或更改它将尝试更新数据库。在完成之后才会调用Seed方法,这就是为什么它不起作用的原因。

在使用EF-Code First进行开发时,我通常会以几种不同的方式解决问题,具体取决于我的数据库的大小。我通常会删除所有表(包括迁移历史表),然后再次运行update-database命令。工作正常,如果你有很多表格上有很多FK约束,那真的很费时间。

我终于厌倦了它并发现these scripts使表格的下降速度快得多。我之所以这样,是因为我在Azure上运行我的应用程序。当我在本地计算机上运行它时,我只是删除整个数据库并创建一个具有相同名称的全新数据库。

优雅的解决方案?没有。 它有用吗?或多或少......

答案 1 :(得分:7)

还有另一种俗气的选择......

右键单击服务器资源管理器中的数据库,然后单击“删除” 然后就可以了

Enable-Migrations -EnableAutomaticMigrations -Force

Update-Database -Force

脏更新,结果干净:)

答案 2 :(得分:4)

对于快速而肮脏的方法,它会让你准时回家吃饭以及大量数据(我还在使用测试数据进行测试)

删除dbo .__ MigrationHistory系统表

以及所有其他表格。

首先备份您的数据!

update-database -verbose(您的意大​​利面可能需要一些酱汁)

我没有留下深刻印象,但它确实有效。

希望将来会有人提出更好的答案。

有助于真正更好地了解迁移。