我有一个在本地工作的ASP .NETMVC 5项目,每当我需要清空数据库时,我只需在其上打开一个新的查询,将可用的数据库下拉菜单更改为master,然后关闭本地数据库上的连接并运行查询“dropdatabase [name]"。然后我构建项目,进入软件包管理器控制台并运行“Update-Database”。2这似乎重建了一个新的本地数据库并运行了configuration.cs文件中的种子方法。
问题是,当我需要在实时环境中测试东西以便更好地测试API等时,我将部署到Azure网站和附带的Azure DB,这很好,也很容易做到。我在发布向导中勾选了“执行代码优先迁移”,大多数时候它都能正常工作,我可以运行和调试我的实时版本。有时候我需要清空数据库,然后从头开始,但我真正找到的唯一方法是进入Azure门户,删除数据库,然后用相同的名称重新创建它。这需要Azure处理一些时间,所以这是一个缓慢的测试周期。
是否有一种快速方法可以将Azure SQL DB删除/重置为其全新、空、原始状态,然后使用“执行代码优先迁移”重新发布,以重新创建表并重新植入数据?
我看到过一些关于在创建数据库后创建初始迁移的讨论,然后尝试使用Powershell执行某种回滚操作以恢复到初始状态,但我没有运气让它工作。并且我想同时删除所有数据。可能我只是语法错误或者没有找到足够好的教程。虽然我可以在Azure DB上运行查询以“drop database [x]”,它会像您所期望的那样删除SQL Azure DB示例,您需要返回到门户中重新创建它。有时,初始状态不好,因为模型已经更新,所以这可能没有任何用处。
我觉得应该有一些更容易更快的方法来测试现场环境中的变化,因为MS提供了所有这些伟大的工具和快捷方式,但他们只是在这个开发阶段放弃了球,还是我错过了什么?
8条答案
按热度按时间kx5bkwkv1#
因为据我所知,没有一种API方法可以做到这一点,所以我们使用了this script to leverage a T-SQL query to clear the database。
删除每个表(并根据需要维护EF迁移历史记录)
如果需要,请先删除外键
在我的测试中,这没有问题(除了我没有在DROP TABLE while查询中使用where子句,因为我没有使用Code First或EF迁移)。
luaexgnf2#
由于接受的答案在Azure上对我不起作用,因此仅添加到答案中。使用以下脚本删除所有表并基本重置Azure数据库。它首先删除所有约束,然后删除所有表。
正如@Skorunka František所评论的,这个脚本假定您使用默认的[dbo]架构,尽管您可以用自己的架构名称来替换它。
遗憾的是,我找不到这个代码的源代码了,因为我把它保存在我的一个仓库里。我希望它能帮助一些人。
rqqzpn5f3#
只是为了添加我的变体到混合...这一个也考虑到视图和外部表。它不会吐在外部表上,这些表必须用DROP EXTERNAL TABLE单独删除。这导致原始版本永远旋转。
zed5wv104#
我通常
1.打开SQL Server Management Studio或从Visual Studio中打开SQL Server对象资源管理器
1.我连接到Azure SQL Server(即:
yourserver.database.windows.net
,其中选择了SQL Server身份验证选项的用户名和密码)(另请记住,您需要在Azure门户中添加防火墙例外,以便以这种方式从PC连接到数据库)1.右键单击数据库并删除。
就这么简单。
然后,由于您提到了代码优先迁移方法,只需在Azure SQL Server中再次运行迁移(例如,在发布时,确保选中为给定SQL Server连接字符串应用迁移的选项)
我通常会删除远程数据库,然后使用命令重新部署应用程序以重新运行迁移。这将再次创建包含新表的数据库。数据库的种子代码在我的启动代码中,因此,如果DB中没有值,则在任何时候初始化应用程序时都会种子化数据库。
这也适用于AspNet核心Mvc(MVC6)
bcs8qyzn5#
Azure SQL本质上是SQL服务器。因此,您可以使用MS SQL Server Management Studio https://learn.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms
使用管理员帐户在Management Studio中打开数据库,然后执行删除表SQL命令或使用GUI右键单击菜单执行任何所需操作,就像使用本地数据库一样。
类似的事情可以在VisualStudioSQLServer对象资源管理器中完成。只需右键单击根“添加SQLServer”。
wnrlj8wa6#
除了@Gizmo3399给出的答案。我们使用
Entity Framework (EF) Core 5.0.2
和.NET 5
的时态表。这是我们用来清除数据库的命令。History
是我们用于系统版本化时态表的模式。目前需要运行两次来删除所有内容,否则不需要修改。sd2nnvve7#
如果有人想拥有这样一个脚本,但要按模式过滤,那么就可以了:
在执行之前,不要忘记将
<TODO_PROVIDE_SCHEMA>
更改为您的模式该脚本将查找与目标模式相关的所有FK,例如,当
schema1.table1
具有schema2.table2
的FK时,如果我们要删除schema2
,则我的脚本也会删除该FK(即使它是不同的模式)脚本还会删除序列
aiazj4mn8#
或者,您可以在C#中卸除数据库,然后使用ExecuteNonQuery建立新的数据库。
其中connection是到Azure SQL Database主数据库的连接。
或者,要创建数据库: