Pin*_*nch 14 c# asp.net-mvc entity-framework ef-code-first
我有一堆Code First创建的表.
然后在SQL中我删除了一个表,以便我不可避免地在堆栈上问这个问题.
update-database在包管理控制台中使用后,我得到:
找不到对象"dbo.ContractParents",因为它不存在或者您没有权限.
重建我的桌子的最佳方法是什么?
我已经读过了 context.Database.CreateIfNotExists();
我把它放在我的种子功能中,但没有做任何事情.
谢谢!
要解释update-database命令会发生什么,以及context.Database.CreateIfNotExists()种子中的方法不起作用的原因:
当您运行update-database命令时,它首先查看您的连接字符串以查看数据库是否存在.如果是,它会查看迁移历史记录表,并根据您的DbContext类中的内容进行检查.如果它发现缺少表或更改它将尝试更新数据库.在完成之后才会调用Seed方法,这就是为什么它不起作用的原因.
在使用EF-Code First进行开发时,我通常会以几种不同的方式解决问题,具体取决于我的数据库的大小.我通常会删除所有表(包括迁移历史表),然后再次运行update-database命令.工作正常,如果你有很多表格上有很多FK约束,那真的很费时间.
我终于厌倦了它,并发现这些脚本使得表的删除速度快得多.我之所以这样,是因为我在Azure上运行我的应用程序.当我在本地计算机上运行它时,我只是删除整个数据库并创建一个具有相同名称的全新数据库.
优雅的解决方 不,它有用吗?或多或少...
对于另一个俗气的选择......
右键单击服务器资源管理器中的数据库,然后单击"删除",然后执行
Enable-Migrations -EnableAutomaticMigrations -Force
Update-Database -Force
Run Code Online (Sandbox Code Playgroud)
脏更新,干净的结果:)