我在使用SQL Azure数据库的应用程序中使用EF迁移。在我手动删除SQL Azure中的表之前,它工作正常。现在,当我发布我的应用程序时,未在SQL Azure中创建删除表。这是我得到的错误。
Cannot find the object "dbo.TableName" because it does not exist
or you do not have permissions.
我觉得我在数据库和模型之间造成了一些不一致。
我正在使用自动迁移。
答案 0 :(得分:4)
为什么要删除表开头?你想重新创建吗?
在我们进入棘手的解决方案之前,您是否尝试使用-TargetMigration选项在您的表创建之前回滚到迁移?我有一种感觉,你会得到关于尝试删除不存在的fk表或索引的SQL错误,但它值得一试。您可以使用此命令update-database -TargetMigration YourOldMigration
执行此操作。这将通过运行迁移文件的Down()方法中的命令来回滚目标迁移后应用的所有迁移。如果您遇到SQL错误,可以尝试修改Down()方法的内容以避免错误。小心。这可能会导致数据丢失。如果EF警告你这件事并且你不在乎。尝试添加-Force以结束命令。
另外还有......
您的迁移不仅仅是通过将db方案与dbcontext / models进行比较来计算的。如果在sql server management studio中打开sql azure数据库,则应该看到一个名为__MigrationHistory的表。它存储通过自动迁移应用于数据库的所有迁移。
请在开始前一直阅读。在跳入之前,您需要考虑一些因素。假设您还没有操作过这个因素,您应该能够找到最初创建表的更改集的行。删除该行。现在EF自动迁移会认为该更改尚未应用于您的数据库。如果你运行update-database,它应该尝试重新运行它。
如果您在该迁移文件中有其他更改,它将尝试重新运行这些更改。这可能会导致各种sql错误。您可能希望手动回滚所有也属于该迁移的更改。担心数据丢失?尝试将数据复制到手动创建的表中,直到完成后再存储。迁移工作完成后,您可以将数据复制回新的表/列。
双重选择。如果您没有太多的开发过程,并且您没有太多关于数据丢失的担忧,那么删除整个数据库并让自动迁移从头开始重新创建它可能会更容易。
希望能帮助你