相关疑难解决方法(0)

Force Entity Framework使用SQL参数化来更好地重用SQL proc缓存

实体框架似乎总是在生成的SQL中使用常量来提供给Skip()和的值 Take().

在下面的简化示例中:

int x = 10;
int y = 10;

var stuff = context.Users
    .OrderBy(u => u.Id)
    .Skip(x)
    .Take(y)
    .Select(u => u.Id)
    .ToList();

x = 20;

var stuff2 = context.Users
    .OrderBy(u => u.Id)
    .Skip(x)
    .Take(y)
    .Select(u => u.Id)
    .ToList();
Run Code Online (Sandbox Code Playgroud)

上面的代码生成以下SQL查询:

SELECT TOP (10) 
[Extent1].[Id] AS [Id]
FROM ( SELECT [Extent1].[Id] AS [Id], row_number() OVER (ORDER BY [Extent1].[Id] ASC) AS [row_number]
    FROM [dbo].[User] AS [Extent1]
)  AS [Extent1]
WHERE [Extent1].[row_number] > 10
ORDER BY [Extent1].[Id] ASC

SELECT …
Run Code Online (Sandbox Code Playgroud)

.net c# sql-server entity-framework entity-framework-4

20
推荐指数
1
解决办法
6356
查看次数