1
我使用Entity Framework和SQL Server Express的2008年当使用探查,我看到这样的SQL:如何使生成的实体框架生成的SQL清洁
SELECT
[Project1].[C1] AS [C1],
[Project1].[EmployeeID] AS [EmployeeID],
[Project1].[FirstName] AS [FirstName],
[Project1].[LastName] AS [LastName],
[Project1].[Active] AS [Active],
[Project1].[Updated] AS [Updated],
[Project1].[Created] AS [Created],
[Project1].[CreatedBy] AS [CreatedBy],
[Project1].[Modified] AS [Modified],
[Project1].[ModifiedBy] AS [ModifiedBy]
FROM (SELECT
[Extent1].[EmployeeID] AS [EmployeeID],
[Extent1].[FirstName] AS [FirstName],
[Extent1].[LastName] AS [LastName],
[Extent1].[Active] AS [Active],
[Extent1].[Updated] AS [Updated],
[Extent1].[Created] AS [Created],
[Extent1].[CreatedBy] AS [CreatedBy],
[Extent1].[Modified] AS [Modified],
[Extent1].[ModifiedBy] AS [ModifiedBy],
1 AS [C1]
FROM [dbo].[Employee] AS [Extent1]
) AS [Project1]
ORDER BY [Project1].[LastName] ASC
是否有什么我打电话子查询会影响SQL Server和/或我的应用程序的性能吗?如果我要手写这个SQL查询,它看起来更像这样:
SELECT
[Project1].[EmployeeID] AS [EmployeeID],
[Project1].[FirstName] AS [FirstName],
[Project1].[LastName] AS [LastName],
[Project1].[Active] AS [Active],
[Project1].[Updated] AS [Updated],
[Project1].[Created] AS [Created],
[Project1].[CreatedBy] AS [CreatedBy],
[Project1].[Modified] AS [Modified],
[Project1].[ModifiedBy] AS [ModifiedBy]
FROM [dbo].[Employee] AS [Project1]
ORDER BY [Project1].[LastName] ASC
有没有办法让这个更清洁?为什么创建子查询?我应该在乎吗?我正在使用LinqToEntities。下面是创建的第一个SQL样的功能:
public DTO.EmployeeDTO[] GetEmployees()
{
using (KDMEntities ctx = new KDMEntities())
{
var employees = (from e in ctx.Employees
orderby e.LastName
select new DTO.EmployeeDTO
{
EmployeeID = e.EmployeeID,
FirstName = e.FirstName,
LastName = e.LastName,
Active = e.Active,
Updated = e.Updated,
Created = e.Created,
CreatedBy = e.CreatedBy,
Modified = e.Modified,
ModifiedBy = e.ModifiedBy
}).ToArray();
return employees;
}
}
+1为措施,然后决定。过早优化是一个黑洞。 – 2009-11-05 14:56:16
我不同意你在说什么,但这并不回答OP的问题。在我看来,如果你不知道幕后发生了什么,这是一场潜在的表演噩梦。我刚碰到这个完全相同的问题,我想了解如何防止EF创建此子查询。 – DMC 2012-05-01 18:18:59