CodeFirstFunctions icon indicating copy to clipboard operation
CodeFirstFunctions copied to clipboard

Paramter Type is not right.

Open jonantoine opened this issue 7 years ago • 2 comments

I have a very simple example to demonstrate this issue.

I have a Table Valued Function:

CREATE FUNCTION [dbo].[TestTVF]
(	
    @param1 varchar(max)
)
RETURNS TABLE 
AS
RETURN 
(
    SELECT 1 as Id, 'Test' as [Name]
)

And I have the DbFunction

[DbFunction("DB", "TestTVF")]
public IQueryable<TestTvfResult> TestTVF([ParameterType(StoreType = "varchar(max)")] string param1)
{
    var p1 = param1 != null ?
        new ObjectParameter("param1", param1) :
        new ObjectParameter("param1", typeof(string));

    return ((IObjectContextAdapter)this).ObjectContext.
    CreateQuery<TestTvfResult>("[DB].[TestTVF](@param1)", p1);
}

But when I use the function the sql generate is this:

exec sp_executesql N'SELECT 
1 AS [C1], 
[Extent1].[Id] AS [Id], 
[Extent1].[Name] AS [Name]
FROM [dbo].[TestTVF](@param1) AS [Extent1]',N'@param1 nvarchar(4000)',@param1=N'test'

Expected: use varchar(max) and not nvarchar(4000)

jonantoine avatar Aug 27 '18 16:08 jonantoine

Thanks, I will need to take a look a this.

moozzyk avatar Aug 28 '18 01:08 moozzyk

FYI, I looked at this some time ago and it seems that the parameter type is passed to EF as specified in the attribute. The value is being lost somewhere in EF but I have not found yet where.

moozzyk avatar Oct 25 '18 05:10 moozzyk