gpt4 book ai didi

c# - 如何从 Entity Framework DbContext 收集当前的 SQL Server session ID?

转载 作者:太空宇宙 更新时间:2023-11-03 13:27:33 25 4
gpt4 key购买 nike

有没有办法确定打开的 DbContext 的当前 SQL Server session ID (@@SPID),而不是直接对数据库进行 SQL 查询?

如果有,是否可以保证在释放 DbContext 并将其连接释放回 Entity Framework 连接池之前,SQL Server session ID 将保持不变?类似这样的东西:

using (MyEntities db = new MyEntities()) {

// the following 3 pieces of code are not existing properties and will result in compilation errors
// I'm just looking for something similar to the following 3 lines
db.CurrentSessionId; //error
db.Database.CurrentSessionId; //error
((IObjectContextAdapter)db).ObjectContext.Connection.CurrentSessionId; //error

// the following code will work, but will this session id be the same until the original DbContext is disposed?
// is there any chance that a db.Database.SqlQuery call will spin off it's own connection from the pool?
short spid = db.Database.SqlQuery<short>("SELECT @@SPID").FirstOrDefault();
}

最佳答案

首先,单独的 Dbcontext 不会在您的数据库上打开任何 sql 进程。查询

所以在这种情况下,当您运行 SELECT @@SPID 时,您肯定会打开一个带有新 ID 的新进程。

好消息是 Entityframework 将使用相同的过程来运行您的后续查询。所以理想情况下,在同一个 using block 中,您将始终获得相同的 @@SPID 值。

您可以运行此查询

select *
from master.dbo.sysprocesses
where program_name = 'EntityFramework'

观察与 Entity Framework 关联的数据库的当前进程。

然后您可以使用下面的查询来获取与特定进程关联的 SQL 语句。有关更多信息,请在此处查看已接受的答案:List the queries running on SQL Server

declare
@spid int
, @stmt_start int
, @stmt_end int
, @sql_handle binary(20)

set @spid = XXX -- Fill this in

select top 1
@sql_handle = sql_handle
, @stmt_start = case stmt_start when 0 then 0 else stmt_start / 2 end
, @stmt_end = case stmt_end when -1 then -1 else stmt_end / 2 end
from master.dbo.sysprocesses
where spid = @spid
order by ecid

SELECT
SUBSTRING( text,
COALESCE(NULLIF(@stmt_start, 0), 1),
CASE @stmt_end
WHEN -1
THEN DATALENGTH(text)
ELSE
(@stmt_end - @stmt_start)
END
)
FROM ::fn_get_sql(@sql_handle)

关于c# - 如何从 Entity Framework DbContext 收集当前的 SQL Server session ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21887530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com