簡體   English   中英

實體框架存儲過程調用超時

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM