1

Ich benutze Entity Framework 6.1.3, wenn ich den Benutzer mit Benutzernamen/Passwort abholen, wie unten gezeigt. EF feuert tatsächlich zwei SQL-Abfragen an die Datenbank. Ich habe SQL Server Profiler verwendet, um die Abfrageaufrufe zu überprüfen. Durch das Verhindern des zweiten Anrufs kann ich die Ausführungszeit reduzieren.Warum löst Entity Framework beim einfachen Abrufen von Tabellenzeilen zwei SQL-Abfragen aus?

C# Code:

Dim oSelectedUser As User = (From oUser As User In oDataContainer.Users Where (oUser.UserName = pUserName And oUser.msPassword = pPassword) Select oUser Where oUser.IsActive = True).SingleOrDefault 

Abfrage # 1:

SELECT TOP (2) 
    [Extent1].[Id] AS [Id], 
    [Extent1].[UserName] AS [UserName], 
    [Extent1].[Password] AS [Password], 
    [Extent1].[Image] AS [Image] 
FROM [dbo].[User] AS [Extent1] 
WHERE 
    ([Extent1].[UserName] = @p__linq__0) AND ([Extent1].[Password] = @p__linq__1) 

Abfrage # 2:

exec sp_executesql N'SELECT TOP (2) 
    [Extent1].[Id] AS [Id], 
    [Extent1].[UserName] AS [UserName], 
    [Extent1].[Password] AS [Password], 
    [Extent1].[Image] AS [Image] 
    FROM [dbo].[User] AS [Extent1] 
    WHERE ([Extent1].[UserName] = @p__linq__0) AND ([Extent1].[Password] = @p__linq__1)',N'@p__linq__0 nvarchar(4000),@p__linq__1 nvarchar(4000)',@p__linq__0=N'usr',@p__linq__1=N'zReNgKelg' 

SQL Profiler event:

enter image description here

+0

Sind Sie sicher, dass Sie die Profilerdaten interpretieren können? – CodeCaster

+0

@CodeCaster Ja Ich habe Profiler-Daten hinzugefügt –

+1

Die beiden Ereignisse zeigen im Wesentlichen die gleiche Aussage. Das Ereignis RPC: Completed ist für den Fall, dass der gesamte Aufruf abgeschlossen ist, und der Befehl SP: Stmt für den Abschluss einer Anweisung in der gespeicherten Prozedur. In diesem Fall sind sie beide ein und dasselbe. – Jeremy

Antwort

2

Die beiden Ereignisse zeigen im Wesentlichen die gleiche Aussage. Das Ereignis RPC: Completed ist für den Fall, dass der gesamte Aufruf abgeschlossen ist, und der Befehl SP: Stmt für den Abschluss einer Anweisung in der gespeicherten Prozedur. In diesem Fall sind sie beide ein und dasselbe.