[英]Entity framework stored procedure call timeout
這是一個奇怪的..
我的數據庫中有一個存儲過程,如下所示:
SET NOCOUNT ON;
WITH CTE AS(
--FC
SELECT transno, RECHASEON,
convert(varchar(12),orderdate, 101) as orderdate,
convert(varchar(12),duedate, 101) as duedate,
m.clientid+'-'+l.name as clientname,
(SELECT TOP 1c.Comments FROM dbo.qcComments c WHERE m.transno = c.transno ORDER BY c.Comment_Date DESC) as MostRecentComment,
'FC' as PortalType,
(SELECT COUNT(*) FROM dbo.qcComments c WHERE m.transno = c.transno) AS NumTimesKickedBack,
m.SubRep,
m.ClientID,
(SELECT convert(varchar(12),MAX(c.Comment_Date), 101) FROM dbo.qcComments c WHERE m.transno = c.transno) as MostRecentReturnDate,
(SELECT TOP 1 c.UserID FROM dbo.qcComments c WHERE m.transno = c.transno ORDER BY c.Comment_Date DESC) AS LastUserKickBack
FROM dbo.maindata m (NOLOCK)
inner join bluscreen.dbo.Lender L (NOLOCK) on L.clientid = M.clientid
where m.cid = @CID
and ((@userlevel='SUBREP' and m.subrep=@UserName) or (@UserLevel<>'SUBREP'))
and m.RCD='' -- open assignment
and exists ( -- qc kickback comments exist for the transno
select transno
from dbo.qcComments c
where c.TransNo = m.TransNo)
UNION
--RPI
SELECT m.TransNo,
m.RechaseON,
convert(varchar(12),m.OrderDate, 101),
convert(varchar(12),m.DueDate, 101),
m.clientid+'-'+l.name as clientname,
(SELECT TOP 1 c.message FROM rpi.dbo.msgbrd c WHERE m.transno = c.transno and c.msgtype= 'QC' ORDER BY c.datetime DESC) AS MostRecentComment,
'RPI' as PortalType,
(SELECT COUNT(*) FROM rpi.dbo.msgbrd c WHERE m.transno = c.transno and c.msgtype= 'QC') as NumTimesKickedBack,
m.SubRep,
m.ClientID,
(SELECT convert(varchar(12),MAX(c.datetime), 101) FROM rpi.dbo.msgbrd c WHERE m.transno = c.transno and c.msgtype= 'QC') as MostRecentReturnDate,
(SELECT TOP 1 c.username FROM rpi.dbo.msgbrd c WHERE m.transno = c.transno and c.msgtype= 'QC' ORDER BY c.datetime DESC) AS LastUserKickBack
FROM webdata.dbo.MainData m
INNER JOIN rpi.dbo.Requests r on m.TransNo=r.transno
INNER JOIN bluscreen.dbo.Lender l on l.clientid = m.clientid
INNER JOIN rpi.dbo.msgbrd msg on m.TransNo=msg.transno and msgtype='QC' --This join is used to check where a TransNo has been kicked back
where m.RCD='' --open
AND r.qcpending='ON' --qc kickback
AND m.CID = @CID
and ((@userlevel='SUBREP' and m.subrep=@UserName) or (@UserLevel<>'SUBREP'))
UNION
--LM
select m.TransNo,
m.RechaseON,
convert(varchar(12), m.OrderDate, 101),
convert(varchar(12),m .DueDate, 101),
m.clientid+'-'+l.name as clientname,
(SELECT TOP 1 c.NOTES FROM LossMitigation.dbo.Translog_Call c WHERE m.transno = c.transno and c.CALL_RESULT_CODE = 'DIS' ORDER BY c.DATETIME_ENTRY DESC) as MostRecentComment,
'LM' as PortalType,
(SELECT COUNT(*) FROM LossMitigation.dbo.Translog_Call c WHERE m.transno = c.transno and c.CALL_RESULT_CODE = 'DIS') as NumTimesKickedBack,
m.SubRep,
m.ClientID,
(SELECT convert(varchar(12),MAX(c.DATETIME_ENTRY), 101) FROM LossMitigation.dbo.Translog_Call c WHERE m.transno = c.transno and c.CALL_RESULT_CODE = 'DIS') as MostRecentReturnDate,
(SELECT TOP 1 c.USERID FROM LossMitigation.dbo.Translog_Call c WHERE m.transno = c.transno and c.CALL_RESULT_CODE = 'DIS' ORDER BY c.DATETIME_ENTRY DESC) as LastUserKickback
from webdata.dbo.MainData m
INNER JOIN lossmitigation.dbo.Requests r on m.TransNo=r.TRANSNO
INNER JOIN lossmitigation.dbo.Translog_Call t on m.TransNo=t.TRANSNO and t.CALL_RESULT_CODE='DIS' --This join is used to check where a TransNo has been kicked back
INNER JOIN bluscreen.dbo.Lender l on l.clientid = m.clientid
where r.Status='PENDING' --open assignment
AND m.CID = @CID
and ((@userlevel='SUBREP' and m.subrep=@UserName) or (@UserLevel<>'SUBREP'))
)
SELECT * FROM cte
ORDER BY
CASE
WHEN @SortBy = 'Rechase' THEN RechaseON
END DESC,
CASE
WHEN @SortBy = 'NumKickbacks' THEN NumTimesKickedBack
END DESC,
CASE
WHEN @SortBy = 'TransNo' THEN TransNo
WHEN @SortBy = 'ClientID' THEN ClientName
WHEN @SortBy = 'Subrep' THEN Subrep
WHEN @SortBy = 'LastKickbackUser' THEN LastUserKickBack
END DESC,
CASE
WHEN @SortBy = 'OrderDate' THEN OrderDate
WHEN @SortBy = 'DueDate' THEN DueDate
WHEN @SortBy = 'ReturnDate' THEN MostRecentReturnDate
ELSE TransNo
END ASC
在我的代碼中,我使用實體框架調用了存儲過程,如下所示:
using webDataDBContext = new WebDataEntities() {
var data = webDataDBContext.view_inqc_manifest_cid_II("11R", "REP", "rpfield", "TransNo").ToList()
}
如果我在服務器上運行存儲過程,它會在不到一秒的時間內執行。 它運行這個查詢:
EXEC [dbo].[view_inqc_manifest_cid_II] '11R', 'REP', 'rpField', 'TransNo'
然而,.NET 中的等效項運行時間超過 100 秒(我取消了查詢,因為運行時間太長)。 我完全不知道為什么 .NET 存儲過程調用需要這么長時間,它執行完全相同的查詢。
有誰知道為什么會這樣?
桌子一定被鎖了?
SET NOCOUNT ON;
WITH CTE AS(
--FC
SELECT transno, RECHASEON,
convert(varchar(12),orderdate, 101) as orderdate,
convert(varchar(12),duedate, 101) as duedate,
m.clientid+'-'+l.name as clientname,
(SELECT TOP 1c.Comments FROM dbo.qcComments c WHERE m.transno = c.transno ORDER BY c.Comment_Date DESC) as MostRecentComment,
'FC' as PortalType,
(SELECT COUNT(*) FROM dbo.qcComments c WHERE m.transno = c.transno) AS NumTimesKickedBack,
m.SubRep,
m.ClientID,
(SELECT convert(varchar(12),MAX(c.Comment_Date), 101) FROM dbo.qcComments c WHERE m.transno = c.transno) as MostRecentReturnDate,
(SELECT TOP 1 c.UserID FROM dbo.qcComments c WHERE m.transno = c.transno ORDER BY c.Comment_Date DESC) AS LastUserKickBack
FROM dbo.maindata m (NOLOCK)
inner join bluscreen.dbo.Lender L (NOLOCK) on L.clientid = M.clientid
where m.cid = @CID
and ((@userlevel='SUBREP' and m.subrep=@UserName) or (@UserLevel<>'SUBREP'))
and m.RCD='' -- open assignment
and exists ( -- qc kickback comments exist for the transno
select transno
from dbo.qcComments c
where c.TransNo = m.TransNo)
UNION
--RPI
SELECT m.TransNo,
m.RechaseON,
convert(varchar(12),m.OrderDate, 101),
convert(varchar(12),m.DueDate, 101),
m.clientid+'-'+l.name as clientname,
(SELECT TOP 1 c.message FROM rpi.dbo.msgbrd c WHERE m.transno = c.transno and c.msgtype= 'QC' ORDER BY c.datetime DESC) AS MostRecentComment,
'RPI' as PortalType,
(SELECT COUNT(*) FROM rpi.dbo.msgbrd c WHERE m.transno = c.transno and c.msgtype= 'QC') as NumTimesKickedBack,
m.SubRep,
m.ClientID,
(SELECT convert(varchar(12),MAX(c.datetime), 101) FROM rpi.dbo.msgbrd c WHERE m.transno = c.transno and c.msgtype= 'QC') as MostRecentReturnDate,
(SELECT TOP 1 c.username FROM rpi.dbo.msgbrd c WHERE m.transno = c.transno and c.msgtype= 'QC' ORDER BY c.datetime DESC) AS LastUserKickBack
FROM webdata.dbo.MainData m (NOLOCK)
INNER JOIN rpi.dbo.Requests r (NOLOCK) on m.TransNo=r.transno
INNER JOIN bluscreen.dbo.Lender l (NOLOCK) on l.clientid = m.clientid
INNER JOIN rpi.dbo.msgbrd msg (NOLOCK) on m.TransNo=msg.transno and msgtype='QC' --This join is used to check where a TransNo has been kicked back
where m.RCD='' --open
AND r.qcpending='ON' --qc kickback
AND m.CID = @CID
and ((@userlevel='SUBREP' and m.subrep=@UserName) or (@UserLevel<>'SUBREP'))
UNION
--LM
select m.TransNo,
m.RechaseON,
convert(varchar(12), m.OrderDate, 101),
convert(varchar(12),m .DueDate, 101),
m.clientid+'-'+l.name as clientname,
(SELECT TOP 1 c.NOTES FROM LossMitigation.dbo.Translog_Call c WHERE m.transno = c.transno and c.CALL_RESULT_CODE = 'DIS' ORDER BY c.DATETIME_ENTRY DESC) as MostRecentComment,
'LM' as PortalType,
(SELECT COUNT(*) FROM LossMitigation.dbo.Translog_Call c WHERE m.transno = c.transno and c.CALL_RESULT_CODE = 'DIS') as NumTimesKickedBack,
m.SubRep,
m.ClientID,
(SELECT convert(varchar(12),MAX(c.DATETIME_ENTRY), 101) FROM LossMitigation.dbo.Translog_Call c WHERE m.transno = c.transno and c.CALL_RESULT_CODE = 'DIS') as MostRecentReturnDate,
(SELECT TOP 1 c.USERID FROM LossMitigation.dbo.Translog_Call c WHERE m.transno = c.transno and c.CALL_RESULT_CODE = 'DIS' ORDER BY c.DATETIME_ENTRY DESC) as LastUserKickback
from webdata.dbo.MainData m (NOLOCK)
INNER JOIN lossmitigation.dbo.Requests r (NOLOCK) on m.TransNo=r.TRANSNO
INNER JOIN lossmitigation.dbo.Translog_Call t (NOLOCK) on m.TransNo=t.TRANSNO and t.CALL_RESULT_CODE='DIS' --This join is used to check where a TransNo has been kicked back
INNER JOIN bluscreen.dbo.Lender l (NOLOCK) on l.clientid = m.clientid
where r.Status='PENDING' --open assignment
AND m.CID = @CID
and ((@userlevel='SUBREP' and m.subrep=@UserName) or (@UserLevel<>'SUBREP'))
)
SELECT * FROM cte
ORDER BY
CASE
WHEN @SortBy = 'Rechase' THEN RechaseON
END DESC,
CASE
WHEN @SortBy = 'NumKickbacks' THEN NumTimesKickedBack
END DESC,
CASE
WHEN @SortBy = 'TransNo' THEN TransNo
WHEN @SortBy = 'ClientID' THEN ClientName
WHEN @SortBy = 'Subrep' THEN Subrep
WHEN @SortBy = 'LastKickbackUser' THEN LastUserKickBack
END DESC,
CASE
WHEN @SortBy = 'OrderDate' THEN OrderDate
WHEN @SortBy = 'DueDate' THEN DueDate
WHEN @SortBy = 'ReturnDate' THEN MostRecentReturnDate
ELSE TransNo
END ASC
我沒有給表加鎖,它工作起來很奇怪,因為它在網站的舊版本中工作......一定與實體框架有關
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.