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

Pin*_*nch 14 c# asp.net-mvc entity-framework ef-code-first

我有一堆Code First创建的表.

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

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

找不到对象"dbo.ContractParents",因为它不存在或者您没有权限.

重建我的桌子的最佳方法是什么?

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

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

谢谢!

led*_*per 9

要解释update-database命令会发生什么,以及context.Database.CreateIfNotExists()种子中的方法不起作用的原因:

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

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

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

优雅的解决方 不,它有用吗?或多或少...


Ste*_*eve 7

对于另一个俗气的选择......

右键单击服务器资源管理器中的数据库,然后单击"删除",然后执行

Enable-Migrations -EnableAutomaticMigrations -Force

Update-Database -Force
Run Code Online (Sandbox Code Playgroud)

脏更新,干净的结果:)