我有一堆Code First创建的表。
然后在SQL中我删除了一个表,以便我不可避免地在堆栈上提出这个问题。
在包管理控制台中使用update-database
后,我得到:
无法找到对象“dbo.ContractParents”,因为它不存在 或者您没有权限。
重建表格的最佳方法是什么?
我已经阅读了context.Database.CreateIfNotExists();
我把它放在我的种子功能中,但没有做任何事情。
谢谢!
答案 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
(您的意大利面可能需要一些酱汁)
我没有留下深刻印象,但它确实有效。
希望将来会有人提出更好的答案。
有助于真正更好地了解迁移。