How to force Entity Framework 4.0 to generate parameters of equivalent size to the corresponding database columns

I have a very simple table called Member , which consists of the following:

 CREATE TABLE [dbo].[Member]( [Member_MemberId] [int] IDENTITY(1000,1) NOT NULL, [Member_ExternalId] [varchar](32) NULL, [Member_ConsumerId] [varchar](32) NULL, CONSTRAINT [PK_Member] PRIMARY KEY NONCLUSTERED ( [Member_MemberId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] 

Im running a query using EF 4.0 from a datacontext as follows:

 return Members.SingleOrDefault(member => member.ExternalId == externalId); 

The generated SQL looks like this:

 exec sp_executesql N'SELECT TOP (2) [Extent1].[Member_MemberId] AS [Member_MemberId], [Extent1].[Member_ExternalId] AS [Member_ExternalId], [Extent1].[Member_ConsumerId] AS [Member_ConsumerId] FROM [dbo].[Member] AS [Extent1] WHERE [Extent1].[Member_ExternalId] = @p__linq__0',N'@p__linq__0 varchar(8000)',@p__linq__0='Paul' 

From POV performance, this query is suboptimal, given that it automatically distinguishes the Member_ExternalId column as varchar(8000) when the column itself is bounded by varchar(32) . Is there a way to get EF to generate on-the-fly size parameters equivalent to their respective strings?

+4
source share
1 answer

This seems to be not the case. I assume this is a built-in function that ensures consistency between execution plans. In the meantime, I replaced the request with a stored procedure.

+1
source

All Articles