我需要以编程方式删除 EF 核心数据库。没问题吧?获取上下文,调用 ctx.Database.EnsureDeleted(),一切就绪。
除了......当数据库正在使用时,您正在使用连接池(这样做是有充分理由的),您可能会遇到无法删除数据库的情况。
回到 EF6 时代,我有一个自定义 DB 初始值设定项,它按如下方式覆盖 InitializeDatabase(将 DB 设置为单用户模式,以便其他连接不会干扰)
public override void InitializeDatabase(AudmDatabaseContext context)
{
context.Database.ExecuteSqlCommand(TransactionalBehavior.DoNotEnsureTransaction
, string.Format("ALTER DATABASE [{0}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE", context.Database.Connection.Database));
base.InitializeDatabase(context);
}
Run Code Online (Sandbox Code Playgroud)
现在我想知道..你如何使用 EF 核心 2.1 做到这一点(或其他让我获得相同效果的东西)?
我想使用 PDO 删除数据库。
这种方法对我来说是最好的
function delete_db($database)
{
$statement = $my_pdo_obj->prepare("DROP DATABASE IF EXISTS :database");
$statement->bindParam(":database", $database);
$statement->execute();
}
Run Code Online (Sandbox Code Playgroud)
但不幸的是,我收到了一个 PDOException,说我的绑定值 ($database) 附近存在语法错误:
致命错误:未捕获的异常 'PDOException' 带有消息 'SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在“?”附近使用的正确语法。在第 1' 行
所以我尝试按如下方式执行查询
function delete_db($database)
{
$statement = $my_pdo_obj->exec("DROP DATABASE IF EXISTS " . $database);
}
Run Code Online (Sandbox Code Playgroud)
它有效。
我想知道为什么准备好的语句不起作用,以及第二个查询是否受到保护。
提前感谢您的想法!
我正在尝试编写数据库备份脚本,部分流程是我需要删除数据库,然后从备份重新创建数据库。
当存在到数据库的连接时,我收到如下失败消息:
DETAIL: There are 2 other sessions using the database.
我一直在寻找一种方法来忽略此问题或在删除数据库之前终止连接。我正在尝试使用下面的查询,但它似乎实际上不允许我在运行后删除数据库。
-- Drop connections
\set database_name `echo $DB_NAME`
SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = ':database_name'
AND pid <> pg_backend_pid();
Run Code Online (Sandbox Code Playgroud)
我从 SO 帖子中获取了查询,该帖子似乎表明可以使用它,是否有更可靠的方法来执行此操作,或者无论是否存在活动连接都强制删除数据库?
我正在尝试删除 postgres 数据库。但我总是得到一个
还有 1 个其他会话正在使用该数据库
错误。
我尝试使用此命令停止所有会话
select pg_terminate_backend(pid) from pg_stat_activity where datname='my_database';
Run Code Online (Sandbox Code Playgroud)
这是结果
pg_terminate_backend
----------------------
(0 rows)
Run Code Online (Sandbox Code Playgroud)
然后我使用了这个命令
DROP DATABASE my_database;
Run Code Online (Sandbox Code Playgroud)
这是整个错误信息
ERROR: database "my_database" is being accessed by other users
DETAIL: There is 1 other session using the database.
Run Code Online (Sandbox Code Playgroud)
我正在使用 postgres 12。
我正在创建和删除数据库以进行一些集成测试.我正在ADO.NET级别进行所有数据库管理.对于我正在使用实体框架的测试,因为实体是我正在测试的一部分.问题是我这样做之后:
using (ProjectEntities db = new ProjectEntities(cs)) {
}
Run Code Online (Sandbox Code Playgroud)
我不能再删除数据库了.它说它正在使用中.如何释放它以便它可以被删除?
我实际上在ADO.NET级别遇到了同样的问题,我做的是:
new SqlCommand("USE [master]", DatabaseConnection).ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)
但我不确定如何对Entity Framework连接执行具有相同效果的操作.我试图手动处理db对象(虽然using子句应该保证),我也尝试手动关闭db.Connection.没有帮助.如果我可以直接运行SQL没有实体框架连接,我相信我能够做到这一点.或许还有另一种方式?
我删除了名为'test'的MongoDB数据库,但是当我连接到mongod时,它会在连接中显示它.请参阅下面的代码.你能帮我理解发生了什么吗?这是一个错误还是我遗失了什么?为什么使用show dbs命令时测试不在数据库列表中.谢谢您的帮助.
Microsoft Windows [版本6.1.7601]版权所有(c)2009 Microsoft Corporation.版权所有.
C:\用户\我> C:\ mongodb的\ BIN \蒙戈
MongoDB shell版本:2.4.8
连接到:测试
D b
测试
显示dbs
本地0.078125GB
>