2

プロジェクトにEF5を使用し、EntityProfilerを使用してプロファイルを作成しました。クエリに検索を使用すると、生成されるSQLは次のとおりです。

SELECT TOP (2) [Extent1].[ID]                  AS [ID],
               [Extent1].[TargetID]            AS [TargetID],
               [Extent1].[BranchID]            AS [BranchID],
               [Extent1].[ApplicationStatus]   AS [ApplicationStatus],
               [Extent1].[UserID]              AS [UserID],
               [Extent1].[AssignedOfficer]     AS [AssignedOfficer],
               [Extent1].[AssignedOfficerCRM]  AS [AssignedOfficerCRM],
               [Extent1].[RegistrationDate]    AS [RegistrationDate],
               [Extent1].[DecisionReasons]     AS [DecisionReasons],
               [Extent1].[DecisionExceptionID] AS [DecisionExceptionID],
               [Extent1].[RiskComment]         AS [RiskComment],
               [Extent1].[CESInformed]         AS [CESInformed],
               [Extent1].[IsCommited]          AS [IsCommited]
FROM   [dbo].[Applications] AS [Extent1]
WHERE  [Extent1].[ID] = '900100' /* @p0 */

呼び出されるコードは次のとおりです。

 public T GetByID(object primaryKey)
        {
            return DB.Set<T>().Find(primaryKey);
        }

だから私の質問は、SQLで生成されるのはSelect Top(2)である理由です

4

1 に答える 1

4

これはSelect Top (2)、DBSetがクエリを実行するためのメソッドに内部的にSingleOrDefault()ここではメソッドを参照FindInStore)使用Findするために実行されます。

これにより、2つの結果が返された場合に例外がスローされ、SingleOrDefaultは、正確に1つの結果または何も期待しないと定義します。

Select Top (1)FirstOrDefault()を使用するSQLwennとして生成されます。

于 2012-10-12T12:37:02.497 に答える