为什么实体框架会生成大参数?如何减少它们?

2024-05-05

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

_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] = '[email protected] /cdn-cgi/l/email-protection' /* @p__linq__0 */) OR (([Extent2].[EmailAddress] IS NULL) AND ('[email protected] /cdn-cgi/l/email-protection' /* @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 时,这看起来相当浪费。

谁能解释这是为什么吗?以及如何更改参数大小?

UPDATE

以下类似的问题也没有给出如何更改此默认行为的解决方案:为什么 code first/EF 在原始 SQL 命令中使用“nvarchar(4000)”作为字符串? https://stackoverflow.com/questions/6538746/why-does-code-first-ef-use-nvarchar4000-for-strings-in-the-raw-sql-command

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


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么实体框架会生成大参数?如何减少它们? 的相关文章

随机推荐