2014-10-30 18 views
1

那麼實體框架Timesout上總是相同的SQL視圖,然後我總是有兩種選擇固定的網站每一個現在,實體框架超時在asp.net

我運行此查詢

USE [ibeems] 
DBCC FREEPROCCACHE 

OR

我改變視圖

然後網頁在接下來的幾天立即打開。

這是視圖

USE [ibeems] 

GO 
ALTER VIEW [dbo].[ViewNewVerificationList] 
AS 
    SELECT   
     dbo.Quotation.ClientId, dbo.Quotation.ActualTurnover,  
     dbo.Quotation.VerificationFee, dbo.Quotation.ConsultationFee, 
     dbo.Quotation.RequestDateTime, dbo.Quotation.ConsultantFirmId, 
     dbo.Quotation.CompanyId, 
     dbo.ActionHistory.ActionNameId AS LastActionID, 
     dbo.ActionHistory.ActionDateTime AS LastActionDateTime, 
     dbo.ActionHistory.Message AS LastActionNote, 
     dbo.ActionHistory.ActionHistoryId AS LastQuotationActionHistoryId, 
     dbo.ActionHistory.ActionCategoryId AS LastActionCategoryID, 
     dbo.Client.CompanyName, dbo.Client.RegistrationNumber,  
     dbo.Client.ContactPerson, dbo.Client.ContactCellNumber, 
     dbo.Client.ContactEmail, dbo.Client.ConsultantId, 
     dbo.Consultant.Name, dbo.Consultant.Surname, 
     dbo.Quotation.Active AS QuotationActive, 
     dbo.Client.ClientCategoryId, dbo.Quotation.VerificationType, 
     dbo.Client.NoClientLogin, 
     dbo.VerificationTask.VerificationTaskId, 
     dbo.VerificationTask.StartedDateTime, 
     dbo.VerificationTask.FilePrepConsultantId, 
     dbo.VerificationTask.SubCharterSectorID, 
     dbo.VerificationTask.Active, 
     dbo.VerificationTask.CertificateDirectory, 
     dbo.VerificationTask.FinishDateTime, dbo.VerificationTask.UserId, 
     dbo.VerificationTask.QuoteId, 
     dbo.[User].Name AS UserName, dbo.[User].Surname AS UserSurname, 
     dbo.[User].IdNumber, dbo.[User].CellNumber, 
     dbo.[User].EmailAddress 
    FROM     
     dbo.Quotation 
    INNER JOIN 
     dbo.Client ON dbo.Quotation.ClientId = dbo.Client.ClientId 
    INNER JOIN 
     dbo.VerificationTask ON dbo.Quotation.QuoteId = dbo.VerificationTask.QuoteId 
    INNER JOIN 
     dbo.Consultant ON dbo.VerificationTask.FilePrepConsultantId = dbo.Consultant.ConsultantId 
    INNER JOIN 
     dbo.[User] ON dbo.VerificationTask.UserId = dbo.[User].UserId 
    INNER JOIN 
     dbo.ActionHistory ON dbo.Quotation.QuoteId = dbo.ActionHistory.QuoteId 
    INNER JOIN 
     (SELECT 
      ActionHistory.QuoteId, 
      MAX(ActionHistory.ActionHistoryId) As MaxId 
     FROM  
      ActionHistory 
     WHERE 
      (ActionNameId <> 9) AND (ActionNameId <> 23) 
      AND IsRemoved = 0 
     GROUP BY 
      ActionHistory.QuoteId) MaxActionHistory ON MaxActionHistory.MaxId = ActionHistory.ActionHistoryId 

回答

0

看一看這篇文章。

http://blogs.u2u.be/diederik/post/2011/01/31/Building-an-Entity-Framework-40-model-on-views-practical-tips.aspx

一些技巧

  1. 使用SCHEMABINDING
  2. Index the views

您也可以remove a single plan from SQL Server,或可能也許創建一個存儲過程,並與EF映射。

+0

我將如何從數據庫的SQL Server中刪除單個計劃。 – 2014-10-30 08:20:36

+0

檢查我發給你的鏈接,也可以使用FREEPROCCACHE發送plan_handle - http://blog.sqlauthority.com/2010/08/28/sql-server-plan-cache-retrieve-and-remove- a-simple-script/ – Mez 2014-10-30 08:40:28

+0

真棒我會在幾天後回來,目前緩存運行後清理乾淨「DBCC FREEPROCCACHE」 當用戶再次聯繫我,因爲網頁上的超時 – 2014-10-30 09:04:15