为什么Entity Framework会生成大型参数?他们怎么能减少?

时间:2015-03-13 20:57:03

标签: asp.net-mvc entity-framework-6

在一个非常简单的数据库查询中:

_service.GetAll<Visitor>().Any(r => r.EmailAddress == email)

使用Glimpse跟踪它时,它会显示传递给数据库的类型@p__linq__0和大小String的参数4000。生成以下SQL:

SELECT
CASE WHEN ( EXISTS (SELECT
    1 AS [C1]
    FROM  [dbo].[Visitor] AS [Extent1]
    INNER JOIN [dbo].[VisitorType] AS [Extent2] ON [Extent1].[Id] = [Extent2].[Id]
    WHERE ([Extent2].[EmailAddress] = 'test@test.com' /* @p__linq__0 */) OR (([Extent2].[EmailAddress] IS NULL) AND ('test@test.com' /* @p__linq__0 */ IS NULL))
)) THEN cast(1 as bit) ELSE cast(0 as bit) END AS [C1]
FROM  ( SELECT 1 AS X ) AS [SingleRowTable1]

当MaxLength为254时,这似乎非常浪费。

任何人都能解释为什么会这样吗?以及如何更改参数大小?

更新

以下类似的问题也没有提供有关如何更改此默认行为的解决方案: Why does code first/EF use 'nvarchar(4000)' for strings in the raw SQL command?

从数据库优化的角度来看,这是有道理的,但是当尝试减少在慢速网络环境中传输到移动客户端的数据量时,将每个字符串参数增加到4000字节是没有意义的。 / p>

0 个答案:

没有答案