2017-06-15 93 views
0

我有一段代碼...TryUpdateModelAsync打開和關閉連接1000的次

TryUpdateModelAsync(tn.IT_Task, "IT_Task"); 

...那曾經工作合理迅速。現在,同一段代碼非常緩慢。有時需要10-15秒才能完成。

使用...

DB.ITConsole.Database.Log = s => System.Diagnostics.Debug.WriteLine(s); 

...輸出什麼在後臺發生的事情,我發現方法打開和關閉數據庫字面上幾千倍。對我來說,似乎至少有「IT_Task」記錄的次數。也許更多。下面輸出的小樣本...

發生了什麼事?如何從視圖集合中更新模型的單個記錄?

Opened connection at 15/06/2017 16:59:40 +01:00 

SELECT 
    [Extent1].[Project_Note_ID] AS [Project_Note_ID], 
    [Extent1].[Project_ID] AS [Project_ID], 
    [Extent1].[Date_Entered] AS [Date_Entered], 
    [Extent1].[Entered_By_ID] AS [Entered_By_ID], 
    [Extent1].[Description] AS [Description] 
    FROM [dbo].[IT_Project_Note] AS [Extent1] 
    WHERE [Extent1].[Project_ID] = @EntityKeyValue1 


-- EntityKeyValue1: "164" (Type = Int32, IsNullable = false) 

-- Executing at 15/06/2017 16:59:40 +01:00 

-- Completed in 0 ms with result: SqlDataReader 



Closed connection at 15/06/2017 16:59:40 +01:00 

Opened connection at 15/06/2017 16:59:40 +01:00 

SELECT 
    [Extent1].[Task_ID] AS [Task_ID], 
    [Extent1].[Entered_By_ID] AS [Entered_By_ID], 
    [Extent1].[Reported_By_ID] AS [Reported_By_ID], 
    [Extent1].[NAB_ID] AS [NAB_ID], 
    [Extent1].[Project_ID] AS [Project_ID], 
    [Extent1].[Description] AS [Description], 
    [Extent1].[Task_Category_ID] AS [Task_Category_ID], 
    [Extent1].[Task_Type_ID] AS [Task_Type_ID], 
    [Extent1].[Task_Status_ID] AS [Task_Status_ID], 
    [Extent1].[Task_Priority_ID] AS [Task_Priority_ID], 
    [Extent1].[Task_Severity_ID] AS [Task_Severity_ID], 
    [Extent1].[Date_Entered] AS [Date_Entered], 
    [Extent1].[Date_Due] AS [Date_Due] 
    FROM [dbo].[IT_Task] AS [Extent1] 
    WHERE [Extent1].[Project_ID] = @EntityKeyValue1 


-- EntityKeyValue1: "164" (Type = Int32, IsNullable = false) 

-- Executing at 15/06/2017 16:59:40 +01:00 

-- Completed in 0 ms with result: SqlDataReader 



Closed connection at 15/06/2017 16:59:40 +01:00 

Opened connection at 15/06/2017 16:59:40 +01:00 

SELECT 
    [Extent1].[Project_Note_ID] AS [Project_Note_ID], 
    [Extent1].[Project_ID] AS [Project_ID], 
    [Extent1].[Date_Entered] AS [Date_Entered], 
    [Extent1].[Entered_By_ID] AS [Entered_By_ID], 
    [Extent1].[Description] AS [Description] 
    FROM [dbo].[IT_Project_Note] AS [Extent1] 
    WHERE [Extent1].[Project_ID] = @EntityKeyValue1 


-- EntityKeyValue1: "203" (Type = Int32, IsNullable = false) 

-- Executing at 15/06/2017 16:59:40 +01:00 

-- Completed in 0 ms with result: SqlDataReader 



Closed connection at 15/06/2017 16:59:40 +01:00 

Opened connection at 15/06/2017 16:59:40 +01:00 

SELECT 
    [Extent1].[Task_ID] AS [Task_ID], 
    [Extent1].[Entered_By_ID] AS [Entered_By_ID], 
    [Extent1].[Reported_By_ID] AS [Reported_By_ID], 
    [Extent1].[NAB_ID] AS [NAB_ID], 
    [Extent1].[Project_ID] AS [Project_ID], 
    [Extent1].[Description] AS [Description], 
    [Extent1].[Task_Category_ID] AS [Task_Category_ID], 
    [Extent1].[Task_Type_ID] AS [Task_Type_ID], 
    [Extent1].[Task_Status_ID] AS [Task_Status_ID], 
    [Extent1].[Task_Priority_ID] AS [Task_Priority_ID], 
    [Extent1].[Task_Severity_ID] AS [Task_Severity_ID], 
    [Extent1].[Date_Entered] AS [Date_Entered], 
    [Extent1].[Date_Due] AS [Date_Due] 
    FROM [dbo].[IT_Task] AS [Extent1] 
    WHERE [Extent1].[Project_ID] = @EntityKeyValue1 


-- EntityKeyValue1: "203" (Type = Int32, IsNullable = false) 

-- Executing at 15/06/2017 16:59:40 +01:00 

-- Completed in 0 ms with result: SqlDataReader 



Closed connection at 15/06/2017 16:59:40 +01:00 

Opened connection at 15/06/2017 16:59:40 +01:00 

SELECT 
    [Extent1].[Task_Note_ID] AS [Task_Note_ID], 
    [Extent1].[Task_ID] AS [Task_ID], 
    [Extent1].[Description] AS [Description], 
    [Extent1].[Entered_By_ID] AS [Entered_By_ID], 
    [Extent1].[Date_Entered] AS [Date_Entered], 
    [Extent1].[CC_User] AS [CC_User] 
    FROM [dbo].[IT_Task_Note] AS [Extent1] 
    WHERE [Extent1].[Task_ID] = @EntityKeyValue1 


-- EntityKeyValue1: "15669" (Type = Int32, IsNullable = false) 

-- Executing at 15/06/2017 16:59:40 +01:00 

-- Completed in 0 ms with result: SqlDataReader 



Closed connection at 15/06/2017 16:59:40 +01:00 

Opened connection at 15/06/2017 16:59:40 +01:00 

SELECT 
    [Extent1].[Project_Note_ID] AS [Project_Note_ID], 
    [Extent1].[Project_ID] AS [Project_ID], 
    [Extent1].[Date_Entered] AS [Date_Entered], 
    [Extent1].[Entered_By_ID] AS [Entered_By_ID], 
    [Extent1].[Description] AS [Description] 
    FROM [dbo].[IT_Project_Note] AS [Extent1] 
    WHERE [Extent1].[Project_ID] = @EntityKeyValue1 


-- EntityKeyValue1: "235" (Type = Int32, IsNullable = false) 

-- Executing at 15/06/2017 16:59:40 +01:00 

-- Completed in 0 ms with result: SqlDataReader 



Closed connection at 15/06/2017 16:59:40 +01:00 

Opened connection at 15/06/2017 16:59:40 +01:00 

SELECT 
    [Extent1].[Task_ID] AS [Task_ID], 
    [Extent1].[Entered_By_ID] AS [Entered_By_ID], 
    [Extent1].[Reported_By_ID] AS [Reported_By_ID], 
    [Extent1].[NAB_ID] AS [NAB_ID], 
    [Extent1].[Project_ID] AS [Project_ID], 
    [Extent1].[Description] AS [Description], 
    [Extent1].[Task_Category_ID] AS [Task_Category_ID], 
    [Extent1].[Task_Type_ID] AS [Task_Type_ID], 
    [Extent1].[Task_Status_ID] AS [Task_Status_ID], 
    [Extent1].[Task_Priority_ID] AS [Task_Priority_ID], 
    [Extent1].[Task_Severity_ID] AS [Task_Severity_ID], 
    [Extent1].[Date_Entered] AS [Date_Entered], 
    [Extent1].[Date_Due] AS [Date_Due] 
    FROM [dbo].[IT_Task] AS [Extent1] 
    WHERE [Extent1].[Project_ID] = @EntityKeyValue1 


-- EntityKeyValue1: "235" (Type = Int32, IsNullable = false) 

-- Executing at 15/06/2017 16:59:40 +01:00 

-- Completed in 0 ms with result: SqlDataReader 



Closed connection at 15/06/2017 16:59:40 +01:00 

Opened connection at 15/06/2017 16:59:40 +01:00 

SELECT 
    [Extent1].[Project_Note_ID] AS [Project_Note_ID], 
    [Extent1].[Project_ID] AS [Project_ID], 
    [Extent1].[Date_Entered] AS [Date_Entered], 
    [Extent1].[Entered_By_ID] AS [Entered_By_ID], 
    [Extent1].[Description] AS [Description] 
    FROM [dbo].[IT_Project_Note] AS [Extent1] 
    WHERE [Extent1].[Project_ID] = @EntityKeyValue1 


-- EntityKeyValue1: "243" (Type = Int32, IsNullable = false) 

-- Executing at 15/06/2017 16:59:40 +01:00 

-- Completed in 0 ms with result: SqlDataReader 



Closed connection at 15/06/2017 16:59:40 +01:00 

Opened connection at 15/06/2017 16:59:40 +01:00 

SELECT 
    [Extent1].[Task_ID] AS [Task_ID], 
    [Extent1].[Entered_By_ID] AS [Entered_By_ID], 
    [Extent1].[Reported_By_ID] AS [Reported_By_ID], 
    [Extent1].[NAB_ID] AS [NAB_ID], 
    [Extent1].[Project_ID] AS [Project_ID], 
    [Extent1].[Description] AS [Description], 
    [Extent1].[Task_Category_ID] AS [Task_Category_ID], 
    [Extent1].[Task_Type_ID] AS [Task_Type_ID], 
    [Extent1].[Task_Status_ID] AS [Task_Status_ID], 
    [Extent1].[Task_Priority_ID] AS [Task_Priority_ID], 
    [Extent1].[Task_Severity_ID] AS [Task_Severity_ID], 
    [Extent1].[Date_Entered] AS [Date_Entered], 
    [Extent1].[Date_Due] AS [Date_Due] 
    FROM [dbo].[IT_Task] AS [Extent1] 
    WHERE [Extent1].[Project_ID] = @EntityKeyValue1 


-- EntityKeyValue1: "243" (Type = Int32, IsNullable = false) 

-- Executing at 15/06/2017 16:59:40 +01:00 

-- Completed in 0 ms with result: SqlDataReader 



Closed connection at 15/06/2017 16:59:40 +01:00 

Opened connection at 15/06/2017 16:59:40 +01:00 

SELECT 
    [Extent1].[Project_Note_ID] AS [Project_Note_ID], 
    [Extent1].[Project_ID] AS [Project_ID], 
    [Extent1].[Date_Entered] AS [Date_Entered], 
    [Extent1].[Entered_By_ID] AS [Entered_By_ID], 
    [Extent1].[Description] AS [Description] 
    FROM [dbo].[IT_Project_Note] AS [Extent1] 
    WHERE [Extent1].[Project_ID] = @EntityKeyValue1 


-- EntityKeyValue1: "257" (Type = Int32, IsNullable = false) 

-- Executing at 15/06/2017 16:59:40 +01:00 

-- Completed in 0 ms with result: SqlDataReader 



Closed connection at 15/06/2017 16:59:40 +01:00 

Opened connection at 15/06/2017 16:59:40 +01:00 

SELECT 
    [Extent1].[Task_ID] AS [Task_ID], 
    [Extent1].[Entered_By_ID] AS [Entered_By_ID], 
    [Extent1].[Reported_By_ID] AS [Reported_By_ID], 
    [Extent1].[NAB_ID] AS [NAB_ID], 
    [Extent1].[Project_ID] AS [Project_ID], 
    [Extent1].[Description] AS [Description], 
    [Extent1].[Task_Category_ID] AS [Task_Category_ID], 
    [Extent1].[Task_Type_ID] AS [Task_Type_ID], 
    [Extent1].[Task_Status_ID] AS [Task_Status_ID], 
    [Extent1].[Task_Priority_ID] AS [Task_Priority_ID], 
    [Extent1].[Task_Severity_ID] AS [Task_Severity_ID], 
    [Extent1].[Date_Entered] AS [Date_Entered], 
    [Extent1].[Date_Due] AS [Date_Due] 
    FROM [dbo].[IT_Task] AS [Extent1] 
    WHERE [Extent1].[Project_ID] = @EntityKeyValue1 


-- EntityKeyValue1: "257" (Type = Int32, IsNullable = false) 

-- Executing at 15/06/2017 16:59:40 +01:00 

-- Completed in 0 ms with result: SqlDataReader 



Closed connection at 15/06/2017 16:59:40 +01:00 

Opened connection at 15/06/2017 16:59:40 +01:00 

SELECT 
    [Extent1].[Project_Note_ID] AS [Project_Note_ID], 
    [Extent1].[Project_ID] AS [Project_ID], 
    [Extent1].[Date_Entered] AS [Date_Entered], 
    [Extent1].[Entered_By_ID] AS [Entered_By_ID], 
    [Extent1].[Description] AS [Description] 
    FROM [dbo].[IT_Project_Note] AS [Extent1] 
    WHERE [Extent1].[Project_ID] = @EntityKeyValue1 


-- EntityKeyValue1: "285" (Type = Int32, IsNullable = false) 

-- Executing at 15/06/2017 16:59:40 +01:00 

-- Completed in 0 ms with result: SqlDataReader 



Closed connection at 15/06/2017 16:59:40 +01:00 

Opened connection at 15/06/2017 16:59:40 +01:00 

SELECT 
    [Extent1].[Task_ID] AS [Task_ID], 
    [Extent1].[Entered_By_ID] AS [Entered_By_ID], 
    [Extent1].[Reported_By_ID] AS [Reported_By_ID], 
    [Extent1].[NAB_ID] AS [NAB_ID], 
    [Extent1].[Project_ID] AS [Project_ID], 
    [Extent1].[Description] AS [Description], 
    [Extent1].[Task_Category_ID] AS [Task_Category_ID], 
    [Extent1].[Task_Type_ID] AS [Task_Type_ID], 
    [Extent1].[Task_Status_ID] AS [Task_Status_ID], 
    [Extent1].[Task_Priority_ID] AS [Task_Priority_ID], 
    [Extent1].[Task_Severity_ID] AS [Task_Severity_ID], 
    [Extent1].[Date_Entered] AS [Date_Entered], 
    [Extent1].[Date_Due] AS [Date_Due] 
    FROM [dbo].[IT_Task] AS [Extent1] 
    WHERE [Extent1].[Project_ID] = @EntityKeyValue1 


-- EntityKeyValue1: "285" (Type = Int32, IsNullable = false) 

-- Executing at 15/06/2017 16:59:40 +01:00 

-- Completed in 0 ms with result: SqlDataReader 



Closed connection at 15/06/2017 16:59:40 +01:00 

更新 - 我想用TryUpdateModelAsync做什麼?

在我看來,我的知識,TryUpdateModelAsync只會做一件事。道歉,如果我錯了。

我已經創建了一個基於數據庫中特定記錄的模型以及該頁面上的一些下拉菜單等輔助材料,然後在GET階段將其發送到頁面進行編輯。然後在POST階段,我會根據相同的記錄創建另一個(相同)模型。

TryUpdateModelAsync旨在從返回POST中獲取數據並使用該數據更新原始記錄,然後才能保存它。

我真的不希望看到數據庫中的進程合併這兩組數據。我只希望通過SaveChanges訪問數據庫。

+0

請仔細閱讀[使用標籤](https://開頭計算器.com/help/tagging)在發佈問題之前以及爲什麼不應該在標題中填寫標籤並在提問時使用正確的標籤。當你實際詢問[tag:entityframework-core]時,標記一個問題[tag.entity-framework]只會導致較少或不正確的答案 – Tseng

+0

如果我們的算命技巧缺乏,請原諒我們,但您如何期待我們幫助,當我們不知道你的'TryUpdateModelAsync'方法甚至在做什麼或者你正在使用哪個數據庫提供者? – Tseng

+0

這實際上是EF6問題,而不是EFCore – Smit

回答

0

我遇到了同樣的問題,其中TryUpdateModelAsync時間太長,無法返回。我認爲問題在於它試圖遍歷數據庫對象上的所有子集合,並且EF6懶散地加載了一切。這顯然是這種情況,因爲我得到了它通過關閉懶加載工作之前,我做這個了從數據庫中我的對象:

_database.Configuration.LazyLoadingEnabled = false;