2017-06-15 89 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;